sql boolean truth test:零或null

时间:2011-02-18 20:17:26

标签: mysql

有没有办法用一个相等运算符测试0和NULL?

我意识到我能做到这一点:

WHERE field = 0 OR field IS NULL

但是如果这样做的话,我的生活将会轻松一百倍:

WHERE field IN (0, NULL)

(顺便说一句,为什么不起作用?)

我还读过在SELECT语句中将NULL转换为0(使用COALESCE)。我正在使用的框架也会令人不愉快。

意识到这是奇怪的具体,但有没有办法用一个WHERE谓词测试0和NULL?

3 个答案:

答案 0 :(得分:12)

我会使用方便的IFNULL函数编写该比较:

IFNULL(field, 0) = 0

回答你关于IN功能的问题:

  

“符合SQL标准,IN   如果不是,则返回NULL   表达在左边是   NULL,但如果找不到匹配项,也是如此   列表和其中一个表达式   列表为NULL。“ - the docs

答案 1 :(得分: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,因为它会使您的意图更加清晰。

答案 2 :(得分:1)

您的WHERE声明是更好的IMO,但您可以尝试WHERE !IFNULL(field, 0)