sql数据库 | sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项

sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项

emp表中的数据

图片[1]-sql数据库 | sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项-习听风雨

 

1. 使用in的时候,忽略为null的,不会查询出comm为null的数据

select * from emp e where e.comm in (300, 500, null);

2. 使用not in的时候,如果 not in后面的选项中没有null,只会查询从comm列不为空的列中过滤,会过滤掉comm为null的数据

select * from emp e where e.comm not in (300, 500);

3. 使用not in 的时候,如果not in后面的选项中有null,不会查询出来任何数据。sql语句本身直接返回false,所以使用not in的时候,要保证in中的条件不会出现null的情况,不然可能会出现意想不到的情况。

select * from emp e where e.comm not in (300, 500, null);

 

转载自

sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项 – Java半路人生 – 博客园
https://www.cnblogs.com/rensheng/p/12019782.html

不属于函数 not in,当目标模板数据为空时,为什么失灵?

A not in B的原理是拿A表值与B表值做是否不等的比较, 也就是a != b. 在sql中, null是缺失未知值而不是空值(详情请见MySQL reference).

当你判断任意值a != null时, 官方说, “You cannot use arithmetic comparison operators such as =, <, or <> to test for NULL”, 任何与null值的对比都将返回null. 因此返回结果为否,这点可以用代码 select if(1 = null, ‘true’, ‘false’)证实.

从上述原理可见, 当询问 id not in (select p_id from tree)时, 因为p_id有null值, 返回结果全为false, 于是跳到else的结果, 返回值为inner. 所以在答案中,leaf结果从未彰显,全被inner取代.
————————————————
版权声明:本文为CSDN博主「perfect-ws」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cxywangshun/article/details/126391632

总结

在WorkFine中使用不属于(包含在)时目标模板不能为空,否则无效,

[wechat key=6363 reply=11952]

这个时候就需要在取值字段使用唯一约束来过滤数据了。

图片[2]-sql数据库 | sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项-习听风雨

[/wechat]

「如果文章对您有用,欢迎点赞分享。」
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容