LEFT JOIN VS INNER JOIN条件

时间:2017-10-06 18:19:51

标签: sql oracle sybase

查询使用LEFT JOIN连接两个表。在所有情况下,该表与INNER JOIN获取相同的记录,因此使用LEFT JOIN的原因是什么。他们在任何情况下记录可能不同,或者结果总是相同,因为我们在where子句中使用第二个表条件

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'

1 个答案:

答案 0 :(得分:3)

Tableb.bcol5上的条件会将LEFT JOIN变为INNER 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';