理解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取代.

相关推荐
友善的鸡蛋6 小时前
项目中执行SQL报错oracle.jdbc.OracleDatabaseException: ORA-00942: 表或视图不存在
数据库·sql·oracle
Olrookie7 小时前
MySQL运维常用SQL
运维·数据库·sql·mysql·dba
星光一影9 小时前
HIS系统天花板,十大核心模块,门诊/住院/医保全流程打通,医院数字化转型首选
java·spring boot·后端·sql·elementui·html·scss
啊吧怪不啊吧9 小时前
初识SQL
服务器·数据库·sql
yuniko-n10 小时前
【力扣 SQL 50】连接
数据库·后端·sql·算法·leetcode
自己收藏学习10 小时前
统计订单总数并列出排名
数据库·sql·mysql
青山撞入怀111413 小时前
sql题目练习——聚合函数
数据库·sql
IT 小阿姨(数据库)1 天前
PostgreSQL REST API 介绍
运维·数据库·sql·postgresql·centos
豆沙沙包?1 天前
2025年--Lc182--sql(排序和分组)--Java版
java·数据库·sql
孟意昶1 天前
Doris专题17- 数据导入-文件格式
大数据·数据库·分布式·sql·doris