它是预期,当我测试,如果空值是不是在列表中,结果始终是假的.
那是:
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为真.那么为什么这是假的?
实际上是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.
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |