考虑这两个类似的SQL
(ON条款中的条件)
select t1.field1, t2.field1
from
table1 t1 inner join table2 t2 on t1.id = t2.id and t1.boolfield = 1
Run Code Online (Sandbox Code Playgroud)
(WHERE子句中的条件)
select t1.field1, t2.field1
from
table1 t1 inner join table2 t2 on t1.id = t2.id
where t1.boolfield = 1
Run Code Online (Sandbox Code Playgroud)
我已经对此进行了一些测试,我可以看到将条件放在外部连接的两个不同位置之间的区别.但是在内连接的情况下,结果集可能会有所不同吗?
对于INNER JOIN,没有有效的区别,尽管我认为第二种选择更清晰.
对于LEFT JOIN,存在巨大差异.ON子句指定从表中选择哪些记录进行比较,WHERE子句过滤结果.
示例1:返回来自tbl 1的所有行,并将它们与来自tbl2的具有boolfield = 1的适当行匹配起来
Select *
From tbl1
LEFT JOIN tbl2 on tbl1.id=tbl2.id and tbl2.boolfield=1
Run Code Online (Sandbox Code Playgroud)
示例2:仅包含来自tbl1的行,这些行在tbl2中具有与boolfield = 1匹配的行.它连接表,然后过滤掉不符合条件的行.
Select *
From tbl1
LEFT JOIN tbl2 on tbl1.id=tbl2.id
WHERE tbl2.boolfield=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
979 次 |
| 最近记录: |