是否可以预期,当我测试列表中是否 没有 null值时,结果始终为false。
那是:
select 'Hello world' where null not in(1,2,3);
不要选择任何内容,因为not in(1,2,3)中的null为false。
我不明白这一点,因为list(1,2,3)不包含任何未定义的值(null),所以我希望null in(1,2,3)中的null为true。那为什么是假的呢?
实际上null not in (1,2,3)返回null,而不是false,但它的工作方式 类似于 falsewhere子句(因为它不是true)。
null not in (1,2,3)
null
false
where
true
空比较(a = null)等总是返回null,因为从null not in (1,2,3)本质上讲,它与以下内容相同:
(a = null)
NOT (null = 1 OR null = 2 OR null = 3)
返回值为null。最好的选择是进行显式的null检查,并分别处理这些情况。
旁注:由于NULL in (null, 1, 2, 3)returnnull也null = null将返回null。
NULL in (null, 1, 2, 3)
null = null