表i1450中的记录总数:
其他表中i.BROJ
等于字段REFERENCA
的条件总数:
当我在NOT IN
子句中使用WHERE
时,它是否应该返回最后两个结果(即64)之间的差异?
这两列都是varchar
类型。
答案 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,'')
或类似的东西,你会排除空值,并返回一个正确的计数。