【发布时间】:2010-12-22 11:32:28
【问题描述】:
我正在阅读这篇文章: Get null == null in SQL
共识是,当尝试测试两个(可为空的)sql 列之间的相等性时,正确的方法是:
where ((A=B) OR (A IS NULL AND B IS NULL))
当 A 和 B 为 NULL 时,(A=B) 仍然返回 FALSE,因为 NULL 不等于 NULL。这就是为什么需要额外检查的原因。
在测试不等式时会怎样?根据上述讨论,我认为要测试不等式,我需要执行以下操作:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
但是,我注意到这不是必需的(至少在 informix 11.5 上不是),我可以这样做:
where (A<>B)
如果 A 和 B 为 NULL,则返回 FALSE。如果 NULL 不等于 NULL,那么这不应该返回 TRUE 吗?
编辑
这些都是很好的答案,但我认为我的问题有点模糊。请允许我改写一下:
鉴于 A 或 B 都可以为 NULL,是否足以检查它们的不等式
where (A<>B)
或者我是否需要像这样明确地检查它:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
请参阅此thread 以获得此问题的答案。
【问题讨论】:
-
简而言之,
anything = NULL为 NULL(既不是真也不是假)。anything <> NULL也是 NULL。
标签: sql database null nullable