1

我想知道以下两个查询中 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 子句会产生什么不同。

4

1 回答 1

1

在您的第一个查询中,只有t2where的记录t2.something = 'this thing'将被连接到 T1,但任何t1没有匹配t2记录的记录都将被包括在内。

在第二个查询中,所有记录都t2将被连接到,t1但只有记录 t2.something = 'this thing'将被包含在最终结果中。

将条件添加t2.something = 'this thing'到 WHERE 子句有效地删除了所有不匹配的结果t2(因为在这种情况下t2.something将是NULL)。所以从逻辑上讲,它与INNER JOIN.

于 2013-05-10T18:32:25.897 回答