有沒有辦法測試0和NULL與一個相等運算符?SQL布爾真值測試:零或空
我知道我可以做到這一點:
WHERE field = 0 OR field IS NULL
但我的生活會一百倍更容易,如果這會工作:
WHERE field IN (0, NULL)
(順便說一句,爲什麼不那工作?)
我也讀過關於將SELECT語句中的NULL轉換爲0(與COALESCE)。我正在使用的框架也會使這個不愉快。
認識到這是奇怪的具體,但有沒有什麼辦法來測試0和NULL與一個WHERE謂詞?
有沒有辦法測試0和NULL與一個相等運算符?SQL布爾真值測試:零或空
我知道我可以做到這一點:
WHERE field = 0 OR field IS NULL
但我的生活會一百倍更容易,如果這會工作:
WHERE field IN (0, NULL)
(順便說一句,爲什麼不那工作?)
我也讀過關於將SELECT語句中的NULL轉換爲0(與COALESCE)。我正在使用的框架也會使這個不愉快。
認識到這是奇怪的具體,但有沒有什麼辦法來測試0和NULL與一個WHERE謂詞?
它不起作用,因爲field In(0,Null)
相當於field = 0 Or field = Null
而不是field = 0 Or field Is Null
。一種選擇是使用CASE表達式:
Case
When field = 0 Then 1
When field Is Null Then 1
End = 1
更好的選擇是與你原來的field = 0 OR field Is Null
堅持,因爲它使你的意圖更清晰。
您的WHERE
聲明更好IMO,但您可以嘗試WHERE !IFNULL(field, 0)
?
回答了 「爲什麼不這項工作」 的一部分:'WHERE領域IN(0,NULL)``是WHERE字段= 0或字段= NULL`最後一種情況是`unknown` – 2011-02-18 20:26:03
如果您擴展你的IN子句,它應該更清楚它爲什麼不起作用:`field IN(0,NULL)`相當於`field = 0 OR field = NULL`,你不能使用「=」運算符來測試對於NULL,結果是未知的。 – 2011-02-18 20:28:33