Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在postgres中使用空值连接填充行_Sql_Postgresql - Fatal编程技术网

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都是同一个表,在我的例子中,是我写的第一个表。