为什么postgres组为空值?

时间:2017-11-03 13:39:02

标签: postgresql group-by null

CREATE TEMP TABLE wirednull (
    id bigint NOT NULL,
    value bigint,
    CONSTRAINT wirednull_pkey PRIMARY KEY (id)
);
INSERT INTO wirednull (id,value) VALUES (1,null);
INSERT INTO wirednull (id,value) VALUES (2,null);

SELECT value FROM wirednull GROUP BY value;

返回一行,但我希望自

以来有两行
SELECT * 
FROM wirednull a 
LEFT JOIN wirednull b 
  ON (a.value = b.value)

找不到任何连接,因为在postgres中为null!= null

1 个答案:

答案 0 :(得分:2)

根据SQL wikipedia

当两个空值相等时:分组,排序和一些设置操作

  

由于SQL:2003将所有Null标记定义为彼此不相等,因此需要特殊定义才能在执行某些操作时将Null组合在一起。 SQL定义"任何两个彼此相等的值,或任何两个Nulls"," not distinct"。[20]这种不明确的定义允许SQL在使用GROUP BY子句(以及执行分组的其他关键字)时对Null进行分组和排序。

这不是问题:

<击> 由于null = nullsomething = null返回unknown而非true/false

所以:

ON (a.value = b.value)

不匹配。

<击>