30

我只是好奇-我知道 NULL 安全的等于运算符<=>,但是有一些 NULL 安全的不等于运算符吗?或者我必须总是使用这样的东西:

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

或者有人喜欢

!(tab.id <=> 1)
4

4 回答 4

14

我发现这NOT (NULL <=> 1)可行,而且我认为它也符合 ISO 标准,但很麻烦。使用列名显示的更好方法如下:NOT (tbl.col1 <=> 1)

于 2013-11-04T22:18:32.607 回答
9
COALESCE(tab.id, 0) != 1

如果你喜欢,可以在这里使用。我遍历参数,并返回不是的第一个值NULL。在这种情况下,如果它是NULL,它将比较0 != 1。尽管它可能使用更多符号,但在这些情况下,它仍然更容易管理,而不是被迫总是使用相反的“布尔值”作为解决方案。

阅读文档COALESCE()

于 2013-04-26T11:07:50.187 回答
8

现在MySQL没有NULL 安全的不等于运算符。

使用MySQL最通用的解决方案是:

!(tab.id <=> 1)

或者

NOT tab.id <=> 1

因为即使代替1你使用它也会正常工作NULL

于 2017-06-23T12:59:35.433 回答
1

如果您知道比较的 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)

然而,性能将取决于NULLs 的流行程度。

于 2016-02-04T14:47:02.070 回答