2011-02-18 119 views
7

有沒有辦法測試0和NULL與一個相等運算符?SQL布爾真值測試:零或空

我知道我可以做到這一點:

WHERE field = 0 OR field IS NULL

但我的生活會一百倍更容易,如果這會工作:

WHERE field IN (0, NULL)

(順便說一句,爲什麼不那工作?)

我也讀過關於將SELECT語句中的NULL轉換爲0(與COALESCE)。我正在使用的框架也會使這個不愉快。

認識到這是奇怪的具體,但有沒有什麼辦法來測試0和NULL與一個WHERE謂詞?

+0

回答了 「爲什麼不這項工作」 的一部分:'WHERE領域IN(0,NULL)``是WHERE字段= 0或字段= NULL`最後一種情況是`unknown` – 2011-02-18 20:26:03

+1

如果您擴展你的IN子句,它應該更清楚它爲什麼不起作用:`field IN(0,NULL)`相當於`field = 0 OR field = NULL`,你不能使用「=」運算符來測試對於NULL,結果是未知的。 – 2011-02-18 20:28:33

回答

6

它不起作用,因爲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堅持,因爲它使你的意圖更清晰。

0

您的WHERE聲明更好IMO,但您可以嘗試WHERE !IFNULL(field, 0)

8

我會使用手動IFNULL功能寫的比較:

IFNULL(field, 0) = 0 

而且響應您對IN功能問題:

「爲了符合SQL標準中, 回報NULL不僅如果 表達式在左邊是 NULL,而且如果在 中找到不匹配的列表和 中的一個表達式l ist是NULL。「 - the docs