今天遇到一个bug,在做复杂查询的时候,用到了 primary_id not in (select id from other_table) 的sql,但是查询出来的数据集却是空的,sql语句完全没有问题,自己排查无果后,后来去翻阅了资料才发现问题所在。
mysql 的 not in 中,不能包含 null 值。否则,将会返回空结果集。
原来mysql中的not in关键字在做匹配的时候,如果id集合中有null值,就会返回空的结果集,再看了我的数据之后,发现果然如此,id集合中果然是有空值的,所以出现了返回空结果集的现象
错误 SQL:(如果table_B表中的 id 包含null值,那么就会返回空的结果集)
?
select * from table_A a
where a.id not in(select b.id from table_B b )
正确SQL:
select * from table_A a
where a.id not in(select b.id from table_B b where b.id is not null)
其实只要保证not in中的子查询结果集中的id 没有null 值即可,实现的方式有很多,大家也可以多多进言献策,一起成长