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);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值