2011-08-24 2 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 이런 내 쿼리에서 가입하세요 추가 할;

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 

마지막 줄에 두 번째 쿼리 오류가 발생합니다.

이 요법에 적합한 구문은 무엇입니까?

+2

가입 다른 테이블에 참조 일종의 링크해야 ON 절이있는 조인 기준을 지정해야합니다. – Andomar

+2

은'on' 절을 잊어 –

+3

@Soner - 조건이 없으면'C'의 모든 행이'A'와'B' 결과 집합의 모든 행과 일치합니다 - 그래서'C'가 비어 있지 않으면, 다시 설명하는 것은 교차 조인 또는 직교 곱입니다. 이것은 거의 항상 당신이 원하는 것이 아닙니다. –

답변

4

OUTER JOIN은 항상 결합 할 열을 지정하기 위해 ON 절이 필요합니다. ,

는 조건이되지 않을 수 있습니다하지만 당신은

당신은 제 1 외부와 마찬가지로 두 번째`왼쪽 외부 join`
4

ON 검색 조건이 누락되었습니다.

+0

@ SonerGönül을 배우기 시작할 때 옛날에 속해 있습니다. 그래서 왜 분명히 만족스럽지 않은 대답을 받아 들였습니까? – APC