我有两个sql连接两个表:
select top 100 a.XXX
,a.YYY
,a.ZZZ
,b.GGG
,b.JJJ
from table_01 a
left join table_02 b
on a.XXX = b.GGG
and b.JJJ = "abc"
and a.YYY between '01/08/2009 13:18:00' and '12/08/2009 13:18:00'
select top 100 a.XXX
,a.YYY
,a.ZZZ
,b.GGG
,b.JJJ
from table_01 a
left join table_02 b
on a.XXX = b.GGG
where b.JJJ = "abc"
and a.YYY between '01/08/2009 13:18:00' and '12/08/2009 13:18:00'
他们的结果不同但我不明白其原因 如果我能在这里得到一些帮助,我将不胜感激。
答案 0 :(得分:3)
每当您使用LEFT JOIN
时,有关正确表格内容的所有条件都应在ON
子句中,否则您有效地将LEFT JOIN
转换为{{1} }}
原因是当使用INNER JOIN
时,将返回左表中的所有行。如果它们与右表匹配,则也将返回匹配行的值,但如果它们与右表中的任何行不匹配,则右表将返回{{1行值
由于您无法将任何内容与LEFT JOIN
(甚至不是另一个null
)(Read this answer to find out why)进行比较,因此您基本上是在告诉您的数据库返回两个表中匹配的所有行。 />
但是,当条件在NULL
子句中时,您的数据库知道将其视为连接条件的一部分。