SQL NOT IN函数未返回预期结果

时间:2017-12-15 14:41:59

标签: sql sql-server-2014

表i1450中的记录总数:

enter image description here

其他表中i.BROJ等于字段REFERENCA的条件总数:

enter image description here

当我在NOT IN子句中使用WHERE时,它是否应该返回最后两个结果(即64)之间的差异?

enter image description here

这两列都是varchar类型。

3 个答案:

答案 0 :(得分:1)

如果子查询返回空值,则IN将不为真。请改为NOT EXISTS

select count(*)
from i1450 i
where not exists (select 1 from FpsPmtOrderRQ f
                  where i.broj = f.REFERENCA)

答案 1 :(得分:1)

如果NULL表的REFERENCA列中有任何FpsPmtOrderRQ值,那么NOT IN子句将无法正常工作 - (the reason why

解决方案是从子选择返回的结果中删除NULL值。

SELECT COUNT(*)
FROM i1450 j
WHERE i.BROJ NOT IN (SELECT REFERENCA FROM FpsPmtOrderRQ WHERE REFERENCA IS NOT NULL)

答案 2 :(得分:1)

我认为你需要合并你的字段来处理空值。这可能就是你获得0的原因。 通过做:

where coalesce(I.BROJ,'n/a') not in (select coalesce(REFERENCA,'')

或类似的东西,你会排除空值,并返回一个正确的计数。