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 查询结果为空解决的主要内容,如果未能解决你的问题,请参考以下文章