我有一个查询(针对 Postgres 和 Informix),其中NOT IN
包含一个子查询,在某些情况下该子查询返回NULL
值,导致该子句(以及整个查询)无法返回任何内容。
理解这一点的最佳方法是什么?我认为NULL
是没有值的东西,因此不希望查询失败,但显然这不是正确的思考方式NULL
。
我有一个查询(针对 Postgres 和 Informix),其中NOT IN
包含一个子查询,在某些情况下该子查询返回NULL
值,导致该子句(以及整个查询)无法返回任何内容。
理解这一点的最佳方法是什么?我认为NULL
是没有值的东西,因此不希望查询失败,但显然这不是正确的思考方式NULL
。
布尔逻辑 - 或三值逻辑
x NOT IN (1, 2, NULL)
是相同的NOT (x = 1 OR x = 2 OR x = NULL)
x <> 1 AND x <> 2 AND x <> NULL
true AND true AND unknown
**相同unknown
**false
因为它不会通过WHERE
条件**现在,这就是为什么人们使用
EXISTS
+NOT EXISTS
而不是IN
+的原因NOT IN
。另请参阅与索引相关的 NOT 逻辑的使用以获取更多信息** 注意:与条件中表达式的末尾
unknown
相同。 在评估表达式时,未知 原因请参见下面的@kgrittn 评论false
WHERE