我在读这篇文章: Get null == null in SQL个
大家一致认为,在try 测试两个(可为空的)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吗?
EDIT
假设A或B都可以为空,用来判断它们的不等式是否足够
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.