2017-10-06 4 views
-1

쿼리는 LEFT JOIN을 사용하여 두 테이블을 조인합니다. 테이블은 모든 경우에 INNER JOIN을 사용하여 동일한 레코드를 가져옵니다. LEFT JOIN을 사용하는 이유는 무엇입니까? 우리는 where 절LEFT JOIN 대 INNER JOIN 조건

SELECT DISTINCT TableA.col1, TableA.col2, TableA.col3, TableA.col4, TableB.col1,TableB.bcol5 
FROM TableA 
LEFT JOIN TableB ON TableA.col1 = TableB.col1   
WHERE 
TableA.col2='007' 
AND TableA.col3='ABCD' 
AND TableB.bcol5='SAM' 

답변

3

Tableb.bcol5의 조건은 INNER JOINLEFT JOIN를 회전에서 두 번째 테이블 조건을 사용하고 있기 때문에 레코드가 다를 수 있습니다 또는 결과는 항상 동일합니다 것입니다 어떤 경우는 있습니다. 당신의 조건으로, 그것은 항상 사실입니다. b.col5은 일치하지 않는 행에 NULL 값을 가지며 조건이 b.bcol5 = 'SAM'이되지 않습니다. INNER JOIN은 절대로 해당 행을 생성하지 않습니다.

은 아마 당신이 의도 : 그 b.col5의 널 (null) 값을 생성하는 것처럼

SELECT DISTINCT a.col1, a.col2, a.col3, a.col4, b.col1, b.bcol5 
FROM TableA a LEFT JOIN 
    TableB b 
    ON a.col1 = b.col1 AND b.bcol5 = 'SAM'   
WHERE a.col2 = '007' AND a.col3 = 'ABCD'; 
+0

나는 ON 근처 b.col5의 추가를 의도하지 않았다. 조건은 INNER JOIN으로 변환되므로 LEFT Join 대신 INNER JOIN을 사용하므로 명확합니다. – Santosh