MySQL的 - NULL安全不等于运营商(MySQL - NULL safe NOT equal

2019-09-01 05:12发布

我只是好奇。 我知道NULL安全等运营商<=>,但有一些空安全不等于运营商,或我必须一直使用类似的东西:

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

还是有人喜欢

!(tab.id <=> 1)

Answer 1:

COALESCE(tab.id, 0) != 1

如果你喜欢的话可以在这里使用。 我经历的参数,并返回第一个值不是NULL 。 在如果是这种情况下NULL ,它将比较0 != 1 。 虽然它可能会使用更多的迹象,它仍然是易于管理,而不是被迫总是有相反的“布尔”在这种情况下的解决方案。

阅读文档COALESCE()



Answer 2:

我发现,NOT(NULL <=> 1)的作品,我想这也是符合ISO标准,但是很麻烦。 一个更好的方式来显示使用列名会是这样的:NOT(tbl.col1 <=> 1)



Answer 3:

现在,MySQL没有一个NULL安全不等于操作。

使用MySQL最普遍的解决方案是:

!(tab.id <=> 1)

要么

NOT tab.id <=> 1

因为它会正常工作,如果连到位1将使用NULL



Answer 4:

如果您知道的比较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小号不过。



文章来源: MySQL - NULL safe NOT equal operator