SQL中使用not in 的坑
本文实验环境为MarinaDB,即MySQL开源版本
先看一下这个sql
SELECT *
FROM table WHERE id IN (NULL) ;
在表记录所有列都有值的情况下显然都是查不出的,那把in 改成not in是不是就能反过来查出所有记录呢?
SELECT *
FROM table WHERE id not IN (NULL) ;
然而结果还是一条都查不出来,按照字面理解,id不为NULL,不是所有记录都满足这个条件吗
为了搞清原因我们试验一下以下三条sql
select '1'='1110'
select '1110'='1110'
select '1110'!=NULL
0为否1为是,以上2条sql的结果符合我们的直观预知,但第三条则不一样了
结果为NULL,我们再实验以下以下两条sql,结果也都为NULL
select NULL!=NULL
select NULL=NULL
说明涉及到NULL的sql判断,一概为未知,也就是否,这也就解释了为什么 WHERE id not IN (NULL) 没有任何一条记录符合,所以我们在日常使用中,需要保证条件list中没有NULL元素
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步