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

相关推荐
流觞 无依25 分钟前
DedeCMS plus/recommend.php SQL注入漏洞修复教程
sql·php
流觞 无依1 小时前
DedeCMS plus/list.php 参数注入(SQL注入)修复教程
sql·安全·php
数厘2 小时前
2.3MySQL 表结构设计:提升 SQL 查询性能的关键
android·sql·mysql
YOU OU3 小时前
MySQL面试题
sql·mysql
野生技术架构师3 小时前
一个简单SQL的深度解析
android·数据库·sql
麦聪聊数据3 小时前
数据库安全与运维管控(五):基于AST的SQL拦截与动态审批
运维·数据库·sql
xiaoyaohou113 小时前
025、分布式计算实战:Spark Core与Spark SQL
sql·ajax·spark
路ZP3 小时前
放大镜下拉框
java·数据库·sql
chatexcel4 小时前
【实战教程】ChatDB 入门:基于自然语言的无 SQL 数据库操作实践
数据库·sql·oracle
泷羽Sec-静安4 小时前
AICTFer一天速成指南
python·sql·ctf