我很惊讶地看到IS NULL和= NULL在select查询中产生不同的结果.他们之间有什么区别?什么时候用.如果你能详细解释我,我会很高兴的.
我正在读这篇文章: 在SQL中获取null == null
并且一致认为,当尝试测试两个(可为空)sql列之间的相等性时,正确的方法是:
where ((A=B) OR (A IS NULL AND B IS NULL))
Run Code Online (Sandbox Code Playgroud)
当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))
Run Code Online (Sandbox Code Playgroud)
但是,我注意到这没有必要(至少在informix 11.5上没有),我可以这样做:
where (A<>B)
Run Code Online (Sandbox Code Playgroud)
如果A和B为NULL,则返回FALSE.如果NULL不等于NULL,那么这不应该返回TRUE吗?
编辑
这些都是很好的答案,但我认为我的问题有点模糊.请允许我改写一下:
鉴于A或B都可以为NULL,是否足以检查它们的不等式
where (A<>B)
Run Code Online (Sandbox Code Playgroud)
或者我需要明确检查它:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)
请参阅此主题以获得此问题的答案.