在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
我如何在简单查询中执行此操作?简单的右连接没有用,因为它不添加空行。
答案 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;