2013-05-10 50 views
1

我想知道下面两个查询中JOIN行为的差异。两个查询之间的SQL Server差异

比方说,比如我有一个查询

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' 

我有麻烦picturizing什么区别它要通过移除条件,使从加入语句的where子句。

+3

第二个将提供类似于INNER JOIN的结果。第一次在连接发生时应用't2.something'过滤器。 – Taryn 2013-05-10 18:26:21

+0

不同的系统可能会有不同的表现。请编辑您的问题,包括SQL Server,Oracle,MySql,PostGRE等标签,如果您的问题是特定于其中的一个。否则,请忽略此评论。 – Renan 2013-05-10 18:26:28

回答

1

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

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

添加条件t2.something = 'this thing' WHERE子句有效地去除没有在t2匹配所有结果(因为在这种情况下t2.somethingNULL)。因此,逻辑上它将与INNER JOIN相同。

相关问题