有没有办法用一个相等运算符测试0和NULL?
我意识到我能做到这一点:
WHERE field = 0 OR field IS NULL
但是如果这样做的话,我的生活将会轻松一百倍:
WHERE field IN (0, NULL)
(顺便说一句,为什么不起作用?)
我还读过在SELECT语句中将NULL转换为0(使用COALESCE)。我正在使用的框架也会令人不愉快。
意识到这是奇怪的具体,但有没有办法用一个WHERE谓词测试0和NULL?
答案 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)
?