2017-10-06 111 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