我只是好奇-我知道 NULL 安全的等于运算符<=>
,但是有一些 NULL 安全的不等于运算符吗?或者我必须总是使用这样的东西:
(tab.id != 1 OR tab.id IS NULL)
或者有人喜欢
!(tab.id <=> 1)
我发现这NOT (NULL <=> 1)
可行,而且我认为它也符合 ISO 标准,但很麻烦。使用列名显示的更好方法如下:NOT (tbl.col1 <=> 1)
COALESCE(tab.id, 0) != 1
如果你喜欢,可以在这里使用。我遍历参数,并返回不是的第一个值NULL
。在这种情况下,如果它是NULL
,它将比较0 != 1
。尽管它可能使用更多符号,但在这些情况下,它仍然更容易管理,而不是被迫总是使用相反的“布尔值”作为解决方案。
阅读文档COALESCE()
现在MySQL没有NULL 安全的不等于运算符。
使用MySQL最通用的解决方案是:
!(tab.id <=> 1)
或者
NOT tab.id <=> 1
因为即使代替1
你使用它也会正常工作NULL
。
如果您知道比较的 RHS IS NOT NULL
:
COALESCE(tab.id != 1, 1)
或者
COALESCE(tab.id != 1, TRUE)
会给你正确的结果。
这是否比以下更具可读性:
(tab.id != 1 OR tab.id IS NULL)
值得商榷。。
我也很想NULL
先通过比较过滤掉逻辑,所以我不必考虑它们!我可能会把你的第一个方程写成:
(tab.id IS NULL OR tab.id != 1)
然而,性能将取决于NULL
s 的流行程度。