【问题标题】:Is Unkown equivalent to Null in PostgreSQL?Unkown 是否等同于 PostgreSQL 中的 Null?
【发布时间】:2021-10-22 22:07:54
【问题描述】:

我的查询中有一些复杂的比较,我想确保我在存在空值的情况下正确理解逻辑。似乎“未知”与 PostgreSQL 中的“空”是一样的,我没想到会这样。

这是我的例子:

create table tab (col int);

insert into tab (col) values (7), (11), (null);


select col,
  (col = 7) is true as is_true,
  (col = 7) is false as is_false,
  (col = 7) is unknown as is_unknown,
  (col = 7) is null as is_null
  from tab;

它显示输出:

+-----+--------+---------+-----------+--------+
|a    |is_true |is_false |is_unknown |is_null |
+-----+--------+---------+-----------+--------+
|7    |true    |false    |false      |false   |
|11   |false   |true     |false      |false   |
|null |false   |false    |true       |**true**|
+-----+--------+---------+-----------+--------+

最后一个值不应该是“假”而不是“真”吗?

【问题讨论】:

  • 由于NULL是一个unknown值,理论上它可能是7,任何比较的结果都是unknown又名Null
  • @TimSchmelter "...is unknown aka Null": 所以你确认 unknown 等同于 null。

标签: sql postgresql logical-operators


【解决方案1】:

问题:

a IS NULL时,下面表达式的结果是什么:

(a = 7) 为空

最后一个值不应该是“假”而不是“真”吗?

来自 SQL 规范:

数据类型 boolean 包含不同的真值 True 和 False。除非被 NOT NULL 禁止 约束,boolean数据类型也支持真值Unknown为null值。

以下内容明确地源自上述内容:

答案:

没有。 a = 7,当a IS NULL,是NULL。那么NULL IS NULL 就是true

【讨论】:

    【解决方案2】:

    这就是 SQL 标准对 NULL 值的规定:

    每种数据类型都包含一个特殊值,称为空值,有时用关键字NULL 表示。该值在以下方面与其他值不同:

    • 由于空值存在于每个数据类型中,无法推断出关键字NULL所隐含的空值的数据类型;因此NULL 只能在某些上下文中用于表示空值,而不是 任何允许使用文字的地方。
    • 尽管空值既不等于任何其他值,也不等于任何其他值——它是否等于任何给定值是未知——在某些情况下,多个空值一起处理;例如, 将所有空值放在一起。

    这是标准对布尔值的规定:

    布尔数据类型包括不同的真值TrueFalse。除非被 NOT NULL 约束禁止,否则布尔数据类型还支持真值 Unknown 作为空值。本规范不区分布尔数据类型的空值和作为 SQL 的结果的真值 Unknown ;它们可以互换使用,表示完全相同的意思。

    所以对于booleanIS NULLIS UNKNOWN 相同。如果你说它与 NULL 相同,你可能会说声明一个“未知”值有点愚蠢,但这就是 SQL 标准的方式。

    但是,当您考虑有多少人正确理解 NULL 时,它会产生以下陈述,这感觉就像一个深刻的事实:

    SELECT NULL IS UNKNOWN;
    
     ?column? 
    ══════════
     t
    (1 row)
    

    【讨论】:

    • 啊,有道理。这意味着根据标准将“未知”呈现为 null。谢谢,
    猜你喜欢
    • 2010-11-30
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2017-11-29
    • 2017-01-20
    • 2016-02-12
    相关资源
    最近更新 更多