Sql陷阱:IN与NOT IN(in 和not in 不是相反的)

216 阅读1分钟

 先来对比下这两组sql结构上有什么不同?

测试的sql demo
一:SELECT * FROM user_info  WHERE create_time in (SELECT max( create_time ) FROM user_info GROUP BY telNumber) 

二:SELECT * FROM user_info  WHERE create_time not in (SELECT max( create_time ) FROM user_info GROUP BY telNumber)
测试的sql demo2
一:SELECT * FROM bg_resource_spot_list_old WHERE created_time in(SELECT max( created_time ) FROM bg_resource_spot_list_old GROUP BY spot_id);
二:SELECT * FROM bg_resource_spot_list_old WHERE created_time not in(SELECT max( created_time ) FROM bg_resource_spot_list_old GROUP BY spot_id);

这两组的结构相同,但是结果却不一样

in 和not in 不是相反的

因为表中的created_time有NULL ,not in 不起作用了,查一下你的数据

果然!

删除脏数据或补充上Null值,再次执行,生效!