开发者

sql boolean truth test: zero OR null

开发者 https://www.devze.com 2023-02-11 18:56 出处:网络
Is there way to test for both 0 and NULL with one equality operator? I realize I could do this: WHERE field = 0 OR field IS NULL

Is there way to test for both 0 and NULL with one equality operator?

I realize I could do this:

WHERE field = 0 OR field IS NULL

But my life would be a hundred times easier if this would work:

WHERE field IN (0, NULL)

(btw, why doesn't that work?)

I've also read abou开发者_如何学运维t converting NULL to 0 in the SELECT statement (with COALESCE). The framework I'm using would also make this unpleasant.

Realize this is oddly specific, but is there any way to test for 0 and NULL with one WHERE predicate?


I would write that comparison using the handy IFNULL function:

IFNULL(field, 0) = 0

And in response to your question about the IN function:

"To comply with the SQL standard, IN returns NULL not only if the expression on the left hand side is NULL, but also if no match is found in the list and one of the expressions in the list is NULL." -the docs


It does not work because field In(0,Null) is the equivalent of field = 0 Or field = Null as opposed to field = 0 Or field Is Null. One option is to use a Case expression:

Case 
When field = 0 Then 1 
When field Is Null Then 1
End = 1

The better option is to stick with your original field = 0 OR field Is Null as it makes your intent clearer.


Your WHERE statement is better IMO, However you can try WHERE !IFNULL(field, 0)?

0

精彩评论

暂无评论...
验证码 换一张
取 消