如何在postgres中使用空值连接填充行

时间:2016-03-31 10:26:52

标签: sql postgresql

在Postgres我有一个这样的表

Symbol

列键唯一可能的值是

id  key value
1   first   x
1   second  y
1   third   z
1   fourth  k
2   first   o
2   second  p
2   third   q

所以这是我的第二个感兴趣的表。

我想加入这两个表,添加一个具有相同id和key的行,但是当起始表没有键的所有行时,使用null值。

事实上,我想得到的表是这一个

key
first
second
third
fourth

我如何在简单查询中执行此操作?简单的右连接没有用,因为它不添加空行。

1 个答案:

答案 0 :(得分:1)

这方法是两个步骤。第一种是在输出中生成所需的所有行。第二个是分配值。第一个使用CROSS JOIN。第二个LEFT JOIN

如果我假设你有一张ids表,那么:

select i.id, k.key, t.value
from ids i cross join
     keys k left join
     t
     on i.id = t.id and k.key = t.key;

如果您没有单独的表中的ID,可以使用子查询执行此操作:

with ids as (
      select distinct id
      from t
     )
select i.id, k.key, t.value
from ids i cross join
     keys k left join
     t
     on i.id = t.id and k.key = t.key;