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元素

posted @ 2024-04-22 15:45  CodeSpike  阅读(49)  评论(0编辑  收藏  举报
Live2D