为什么null不在(1,2,3)中

MTi*_*ted 4 sql postgresql

它是预期,当我测试,如果空值是不是在列表中,结果始终是假的.

那是:

 select 'Hello world' where null not in(1,2,3);
Run Code Online (Sandbox Code Playgroud)

不要选择任何内容,因为(1,2,3)中的null不为false.

我不明白这一点,因为列表(1,2,3)不包含任何未定义的值(null)所以我希望不在(1,2,3)中的null为真.那么为什么这是假的?

D S*_*ley 8

实际上是null not in (1,2,3)返回null,不是false,但它的作用就像假一个where条款(因为它不是true).

空比较(a = null)等总是返回null,因为null not in (1,2,3)基本上与以下相同:

NOT (null = 1 OR null = 2 OR null = 3)

返回值将是null.您最好的选择是进行显式空检查并单独处理这些情况.

旁注:NULL in (null, 1, 2, 3)返回后null也会null = null返回null.