我只是好奇。我知道NULL安全等于运算符< =>,但是有一些NULL安全NOT等于运算符,或者我必须总是使用类似的东西:
(tab.id != 1 OR tab.id IS NULL)
或某人更喜欢
!(tab.id <=> 1)
答案 0 :(得分:11)
我发现NOT(NULL&lt; =&gt; 1)有效,我认为它也符合ISO标准,但很麻烦。使用列名显示的更好方法是:NOT(tbl.col1&lt; =&gt; 1)
答案 1 :(得分:8)
COALESCE(tab.id, 0) != 1
如果您喜欢,可以在这里使用。我浏览参数,并返回不是NULL
的第一个值。在这种情况下,如果是NULL
,则会比较0 != 1
。虽然它可能会使用更多的符号,但它仍然更容易管理,而不是被迫在这些情况下始终使用相反的“布尔”作为解决方案。
答案 2 :(得分:4)
现在 MySQL 没有 NULL-safe not equal 运算符。
使用 MySQL ,最通用的解决方案是:
!(tab.id <=> 1)
或
NOT tab.id <=> 1
因为即使代替1
您也会使用NULL
,它才能正常运作。
答案 3 :(得分:1)
如果您知道比较IS NOT NULL
的RHS:
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
的流行程度。