考虑这两个相似的 SQL
(ON 子句中的条件)
select t1.field1, t2.field1
from
table1 t1 inner join table2 t2 on t1.id = t2.id and t1.boolfield = 1
(WHERE 子句中的条件)
select t1.field1, t2.field1
from
table1 t1 inner join table2 t2 on t1.id = t2.id
where t1.boolfield = 1
我已经对此进行了一些测试,我可以看到在外部连接的两个不同位置放置条件之间的区别。
但在内连接的情况下,结果集会有所不同吗?
对于 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
示例 2:将仅包含 tbl1 中的行,这些行在 tbl2 中具有 boolfield=1 的匹配行。它连接表,然后过滤掉不满足条件的行。
Select *
From tbl1
LEFT JOIN tbl2 on tbl1.id=tbl2.id
WHERE tbl2.boolfield=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)