sql语句中使用in、not in 查询时,注意条件范围中的null值处理事项
emp表中的数据
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]
这个时候就需要在取值字段使用唯一约束来过滤数据了。
[/wechat]
「如果文章对您有用,欢迎点赞分享。」
请登录后查看评论内容