Sql 如何在postgres中使用空值连接填充行
在博士后,我有一张这样的桌子Sql 如何在postgres中使用空值连接填充行,sql,postgresql,Sql,Postgresql,在博士后,我有一张这样的桌子 id key value 1 first x 1 second y 1 third z 1 fourth k 2 first o 2 second p 2 third q 列键的唯一可能值是 key first second third fourth 这是我感兴趣的第二张表格 我想连接这两个表,添加一个具有相同id和键的行,但当起始表没有所有键行时,该行的值为null 事实上,我想要的是这张桌子 id key
id key value
1 first x
1 second y
1 third z
1 fourth k
2 first o
2 second p
2 third q
列键的唯一可能值是
key
first
second
third
fourth
这是我感兴趣的第二张表格
我想连接这两个表,添加一个具有相同id和键的行,但当起始表没有所有键行时,该行的值为null
事实上,我想要的是这张桌子
id key value
1 first x
1 second y
1 third z
1 fourth k
2 first o
2 second p
2 third q
2 fourth [null]
如何在简单查询中做到这一点?简单的右连接没有用处,因为它不会添加空行。实现这一点的方法有两个步骤。第一种方法是在输出中生成所需的所有行。第二种方法是分配值。第一个使用
交叉连接
。第二个左连接
如果我假设您有一个ID表,那么:
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;
“我想连接这两个表”,哪两个表,你只提到一个…第二个表显然是我写的第二个表。我认为这一点都不明显(直到你编辑)。您描述了一个表,然后提到了
键
的可能值(谁说可能值
是一个实际的表),最后描述了您的预期输出。谢谢,它成功了。我只想澄清一下,在第一个查询中,在我的例子中,I和t都是同一个表,在我的例子中,是我写的第一个表。