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