sql not in 查询结果为空解决

Posted bitcarmanlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql not in 查询结果为空解决相关的知识,希望对你有一定的参考价值。

使用下列sql语句进行查询时,发现出来的结果为0

select count(distinct id) from result where date=20221205 and us_id='xxx' and id not in (select distinct id from xxx where date>=20221128 and date <= 20221204);

上述的sql语句,逻辑还是比较清晰:
1.从result表中查询id列。
2.在子查询中,从xxx表中也查询id列。
3.通过not in,查找在result中且不在xxx表中的id,并对id做去重,最后进行count计数操作。

result表与xxx表中都有数据,且result表中的id数量多余xxx表,正常应该输出一个正整数,但是该语句查询出来的结果为0,很显然不符合预期。

那么问题在哪里呢?
因为not in 转换为条件对比时候,需要与每个值进行不等于对比,并且用逻辑与and进行连接。除此以外,还会与NULL值进行不等于对比。而任何值与NULL值进行对比,结果都为null,即idxxx <> null 返回的都为false,最终not in子句不会返回任何一行数据。

总结一下就是,如果not in中只要有一个id位null,就会导致返回的结果为0。

为了解决上述返回结果不准确的问题,可以将子查询中的null值去掉即可。

select count(distinct id) from result where date=20221205 and us_id='xxx' and id not in (select distinct id from xxx where date>=20221128 and date <= 20221204 and id is not null);

以上是关于sql not in 查询结果为空解决的主要内容,如果未能解决你的问题,请参考以下文章

SQL 中 NOT IN 查询不到数据

沫沫金Sql子查询Not In 无结果原因

SQL语句中 NOT IN 子句的“正确打开方式”

Exists 和Not Exists使用

SQL问题求助,查询结果如何清除NULL的空值

在SQL Server中为什么不建议使用Not In子查询