我想知道区别:
select *
from Table1 T1
left join Table1 T2 on T1.id = T2.id + 1 and (T2.id > 3)
VS
select *
from Table1 T1
left join Table1 T2 on T1.id = T2.id + 1
where (T2.id > 3)
答案 0 :(得分:4)
存在显着差异。
select * from Table1 T1 left join Table1 T2 on T1.id=T2.id+1 where (T2>3
where子句将左连接更改为内连接,因为它不允许从左连接返回空值。这意味着将排除左连接未找到匹配记录的所有行,因为返回的空值将与3进行比较并丢弃该行(这与使其成为内连接的效果相同)
第一个声明是在连接中应用过滤器:
select * from Table1 T1 left join Table1 T2 on T1.id=T2.id+1 and (T2>3)
这意味着它将生效并使用左连接过滤可以连接到的行,但是当左连接无法找到匹配的行时,这不会导致丢弃行。
答案 1 :(得分:2)
在INNER JOIN
中,你所处的条件无关紧要
它只会对LEFT JOIN
或RIGHT JOIN
。
前段时间我写了一个类似问题的详细答案,解释了SQL Server在两种情况下的不同之处。
你可以在这里查看:
What is the difference in these two queries as getting two different result set?