这两个sql服务器查询都应返回相同的计数结果,但返回的结果不同-8219和7876。 左联接应返回左表中的所有行(8219)。 这样的结果(7876)可能是什么原因?
select count(*)
from t1 left join t2 on t1.id=t2.id
where t2.[date]='20191001'
-- returns 7876
select count(*)
from t1 left join t2 on t1.id=t2.id
-- returns 8219
select count(*)
from t2
where [date]<>'20191001' or [date] is null
-- returns 0
答案 0 :(得分:0)
您的第一个查询具有LEFT JOIN
,但是WHERE
子句将其转换为内部联接,因为它过滤掉了所有NULL
值。
正确的解决方案是将条件移至ON
子句:
select count(*)
from t1 left join
t2
on t1.id = t2.id and t2.[date] = '20191001';