我想知道以下两个查询中JOIN行为的不同。
比方说,我有一个查询
SELECT *
FROM table1 t1
LEFT JOIN table2 t2
ON t1.column1 = t2.column2
AND t2.something = 'this thing'
WHERE some other conditions
SELECT *
FROM table1 t1
LEFT JOIN table2 t2
ON t1.column1 = t2.column2
WHERE some other conditions AND t2.something = 'this thing'
我无法通过将条件从join语句移到where子句来描绘它的不同之处。
答案 0 :(得分:1)
在您的第一个查询中,只有t2
中t2.something = 'this thing'
将加入T1的记录,但将包含不具有匹配t1
记录的任何t2
记录。
在第二个查询中,t2
中的所有记录都会加入t1
,但只会记录t2.something = 'this thing'
将包含在最终结果中的位置。
将条件t2.something = 'this thing'
添加到WHERE子句有效地删除了t2
中没有匹配项的所有结果(因为在这种情况下t2.something
将是NULL
)。从逻辑上讲,它与INNER JOIN
相同。