小编典典

将条件放入内部联接的ON子句与主查询的where子句之间在逻辑上有区别吗?

sql

考虑这两个类似的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

我已经对此进行了一些测试,我可以看到在两个不同位置为外部联接放置条件之间的区别。但是在内部联接的情况下,结果集会有所不同吗?


阅读 257

收藏
2021-03-23

共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
2021-03-23