MySQL - NULL安全不等于运算符

时间:2013-04-26 11:00:47

标签: php mysql null equals

我只是好奇。我知道NULL安全等于运算符< =>,但是有一些NULL安全NOT等于运算符,或者我必须总是使用类似的东西:

(tab.id != 1 OR tab.id IS NULL)

或某人更喜欢

!(tab.id <=> 1)

4 个答案:

答案 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。虽然它可能会使用更多的符号,但它仍然更容易管理,而不是被迫在这些情况下始终使用相反的“布尔”作为解决方案。

阅读COALESCE()

的文档

答案 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的流行程度。