我注意到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」
這可能是一個預期的行爲,但我不知道爲什麼它的設計如此
這是SQL標準。這就是'NULL'操作在語言中定義的方式。而'NULL'並不意味着「沒有價值」;它意味着「未知」。 – 2014-11-04 18:03:27
'<=>'那是什麼? - 是MySQL的具體情況,是否有與在NOT()中包裝相反的其他方式? – Jake 2017-10-11 05:48:09