postgresql – 为什么带有NULL的集合的NOT IN总是返回FALSE / NULL?

前端之家收集整理的这篇文章主要介绍了postgresql – 为什么带有NULL的集合的NOT IN总是返回FALSE / NULL?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个查询(对于Postgres和Informix),带有一个包含子查询的NOT IN子句,在某些情况下返回NULL值,导致该子句(和整个查询)无法返回任何内容.

理解这个的最好方法是什么?我认为NULL是没有值的东西,因此不期望查询失败,但显然这不是想到NULL的正确方法.

布尔逻辑 – 或 Three valued logic

> IN是一系列OR条件的简写
> x NOT IN(1,2,NULL)与NOT相同(x = 1 OR x = 2 OR x = NULL)
> …与x<>相同1和x<> 2和x<>空值
> …与真实相同且真实且未知**
> … =未知**
> …在这种情况下几乎与false相同,因为它不会通过WHERE条件**

现在,这就是民间使用EXISTS NOT EXISTS而不是IN NOT IN的原因.另请参阅The use of NOT logic in relation to indexes了解更多信息

**注意:在WHERE条件中表达式结尾处的unknown与false相同.在评估表达式时,它是未知的请参阅下面的@ kgrittn的评论

原文链接:https://www.f2er.com/postgresql/192396.html

猜你在找的Postgre SQL相关文章