理解SQL中not in 与null值的真实含义

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

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

举个例子

sql 复制代码
select id,case when p_id is null then 'Root' 
when id not in (select p_id from tree) then 'Leaf' end type
else 'Inner' 
from tree

这种写法会导致Leaf结果完全看不到

从上述原理可见, 当询问 id not in (select p_id from tree)时, 因为p_id有null值, 返回结果全为false, 于是跳到else的结果, 返回值为inner. 所以在答案中,leaf结果从未彰显,全被inner取代.

相关推荐
yuniko-n1 小时前
【MySQL】通俗易懂的 MVCC 与事务
数据库·后端·sql·mysql
SAP小崔说事儿2 小时前
SAP B1 库龄分析报表(SQL版本&非批次管理)
数据库·sql·sap·sap b1·business one·批次管理·库龄分析
Mr.朱鹏15 小时前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
ccino .16 小时前
sql注入中过滤分隔符的测试方法
数据库·sql
Hello.Reader17 小时前
Flink SQL CREATE 语句从建表到 CTAS/RTAS,一次讲清
sql·flink·linq
2501_9167665420 小时前
JDBC以及工具类介绍
sql
她说..21 小时前
Spring AOP场景4——事务管理(源码分析)
java·数据库·spring boot·后端·sql·spring·springboot
男孩李21 小时前
linux下执行pg数据的sql文件,报错error:permission denied for schema plat
数据库·sql
小阿宁的猫猫21 小时前
sqlmap的使用
sql·网络安全·php
嘟嘟w1 天前
SQL注入是什么
数据库·sql·oracle