2011-08-24 114 views
-19

我有這樣的查詢;SQL:在查詢中使用兩個LEFT OUTER JOIN

SELECT a.ID, a.TURQ_ID, a.UNVAN, a.TIP, a.AKTOR, 
     a.GSM_ALAN, a.GSM_TEL, a.IS_ALAN, a.IS_TEL, 
     a.IS_EXT, a.EV_ALAN, a.EV_TEL, a.ADRES, 
     a.TEMSILCI_ACK, 
     (CASE WHEN A.YAZ_ADRES IS NULL 
     THEN (B.IS_ADRES1 +' '+B.IS_ADRES2) 
     ELSE A.YAZ_ADRES END) 
     COLLATE DATABASE_DEFAULT AS YAZ_ADRES , A.SEHIR, A.PS, A.MEMO 
FROM PROSPECT_MASTER A 
LEFT OUTER JOIN YAZ..MARDATA.S_MUSTERI B 
ON A.ID IN (B.TC_KIM_NO, B.VERGI_NO) // Result 12730 rows 

我想補充另一個LEFT OUTER在我這樣的查詢JOIN;

SELECT a.ID, a.TURQ_ID, a.UNVAN, a.TIP, a.AKTOR, 
     a.GSM_ALAN, a.GSM_TEL, a.IS_ALAN, a.IS_TEL, 
     a.IS_EXT, a.EV_ALAN, a.EV_TEL, a.ADRES, 
     (CASE WHEN a.TEMSILCI_ACK IS NULL THEN C.TEMSILCI_ACK ELSE A.TEMSILCI_ACK END) COLLATE DATABASE_DEFAULT AS TEMSİLCİ, 
     (CASE WHEN A.YAZ_ADRES IS NULL 
     THEN (B.IS_ADRES1 +' '+B.IS_ADRES2) 
     ELSE A.YAZ_ADRES END) 
     COLLATE DATABASE_DEFAULT AS YAZ_ADRES , A.SEHIR, A.PS, A.MEMO 
FROM PROSPECT_MASTER A 
LEFT OUTER JOIN YAZ..MARDATA.S_MUSTERI B 
ON A.ID IN (B.TC_KIM_NO, B.VERGI_NO) 
LEFT OUTER JOIN YAZ..MARDATA.T_TEMSILCI_KOD C 

但是第二個查詢在最後一行出現錯誤。

這個sutiation的正確語法是什麼?

+2

你忘了第二個'左外join' – Andomar

+2

了'on'條款與第一外連接,你需要用ON子句指定連接標識符。 –

+3

@Soner - 如果你沒有條件,那麼'C'中的每一行都要匹配'A'和'B'結果集中的每一行 - 所以如果'C'不是空的,重新描述是交叉連接或笛卡爾產品。這幾乎總是不是你想要的。 –

回答

4

OUTER JOIN總是需要ON子句來指定要加入的列。

可能不存在的條件,但你需要鏈接到某種參考的其他表

4

您錯過了ON搜索條件。

+0

@SonerGönül - 那麼爲什麼你接受一個明顯不滿意的答案? – APC