有没有办法测试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