2014-11-04 31 views
3

我注意到MySQL中有些奇怪的東西,我想知道爲什麼它會以這種方式運行,並且有辦法改變它?爲什麼MySQL在查找不相等時忽略空值?

方案

我賬戶有以下的列id, name, type其中類型是InnoDB表一爲空的。現在

,可以說我有10條記錄,其中TYPE = 「TEST」 和100條記錄與他們type IS NULL和20條記錄,其中TYPE = 「標準」

如果我運行此查詢

SELECT * FROM accounts WHERE type <> "TEST" 

此查詢僅顯示20條只有type =「STANDARD」的記錄,並且忽略具有空值的100條記錄。

要解決這一點,我會做這樣的事情

SELECT * FROM accounts WHERE IFNULL(type,"") <> "TEST" 

OR

SELECT * FROM accounts WHERE (type <> "TEST" OR type IS NULL) 

NULL值是指空 「又名沒有價值」,並沒有值意味着<> 「TEST」

這可能是一個預期的行爲,但我不知道爲什麼它的設計如此

+4

這是SQL標準。這就是'NULL'操作在語言中定義的方式。而'NULL'並不意味着「沒有價值」;它意味着「未知」。 – 2014-11-04 18:03:27

+0

'<=>'那是什麼? - 是MySQL的具體情況,是否有與在NOT()中包裝相反的其他方式? – Jake 2017-10-11 05:48:09

回答

3
SELECT * FROM accounts WHERE type <> "TEST" 

這句話的意思是,

「從那裏列類型的值不等於‘TEST’賬戶選擇行」。

這意味着mysql返回具有不等於「TEST」的類型值的記錄。
現在在這裏,由於NULL意味着沒有值,它不會返回那些沒有任何類型列值的記錄。

+0

謝謝您的解釋:) – Jaylen 2014-11-04 22:24:27

1

NULL的意思是「無法知道/不知道的值」:與「無值」不同 - 根據不可用的值無法進行比較。

+0

感謝您的幫助 – Jaylen 2014-11-04 22:23:37