2017-10-06 158 views
-1

查詢連接兩個帶有LEFT JOIN的表。在所有情況下,表都使用INNER JOIN獲得相同的記錄,那麼使用LEFT JOIN的原因是什麼?是他們的任何情況下,這些記錄可以是不同的,還是有結果總是相同的,因爲我們使用的where子句左加入VS內部加入條件

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條件轉動LEFT JOININNER JOIN第二個表的條件。根據你的條件,這總是如此。 b.col5在非匹配行中有NULL值,並且條件b.bcol5 = 'SAM'失敗。 INNER JOIN永遠不會產生這些行。

想必你打算:

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

我不打算加入b.col5的附近,因爲這將產生b.col5的空值。因爲隨着條件將其轉換爲INNER JOIN,將使用INNER JOIN而不是LEFT Join來清除。 – Santosh