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

相关推荐
曹牧8 小时前
SQL:多个事务同时修改同一索引块
数据库·sql
lzhdim10 小时前
SQL 入门 12:SQL 视图:创建、修改与可更新视图
java·大数据·服务器·数据库·sql
@小柯555m11 小时前
MySql(高级操作符--操作符混合运用)
数据库·sql·mysql
@小柯555m18 小时前
MySql(高级操作符--Where in 和Not in)
数据库·sql·mysql
小的~~19 小时前
Milvus会存在SQL注入攻击吗?
数据库·sql·milvus
许彰午19 小时前
CacheSQL(三):双 HTTP 引擎与 SQL 查询——接口抽象的价值
java·数据库·sql·缓存
俺不要写代码1 天前
数据库:DQL
数据库·sql·mysql
uElY ITER2 天前
MySQL 中如何进行 SQL 调优
android·sql·mysql
禹凕2 天前
MYSQL——基础知识(元数据)
数据库·sql·mysql