SQL中使用not in 的坑

CodeSpike發表於2024-04-22

本文實驗環境為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元素

相關文章