sql boolean truth test:零或null

ack*_*ack 10 mysql

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

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

WHERE field = 0 OR field IS NULL

但如果这样可行,我的生活将会轻松一百倍:

WHERE field IN (0, NULL)

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

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

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

Teh*_*ike 12

我会用方便的IFNULL功能写出这个比较:

IFNULL(field, 0) = 0
Run Code Online (Sandbox Code Playgroud)

并回答您关于IN功能的问题:

"为了符合SQL标准,IN不仅在左侧的表达式为NULL时返回NULL,而且如果在列表中找不到匹配,并且列表中的一个表达式为NULL,则返回NULL." - 文档


Tho*_*mas 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
Run Code Online (Sandbox Code Playgroud)

更好的选择是坚持使用原件,field = 0 OR field Is Null因为它可以使您的意图更清晰.