postgresql在一个结果中显示两个子列表

时间:2017-04-26 06:42:19

标签: postgresql postgresql-9.6

假设非常简单的架构

表格主要

main_id, ...
1      , ...
2      , ...

表sub1

main_id, sub1_data
1      , a
1      , b
2      , g

表sub2

main_id, sub2_data
1      , 1
2      , 1
2      , 2

作为输出我想

main_id, sub1_data, sub2_data
1      , a        , 1
1      , b        , <null>
2      , g        , 1
2      , <null>   , 2

使用联合我可以接近,但每个列表得到它自己的行

SELECT main_id, sub1_data, NULL
FROM sub1
UNION 
SELECT main_id, NULL, sub2_data
FROM sub2

结果

main_id, sub1_data, sub2_data
1      , a        , <null>
1      , b        , <null>
1      , <null>   , 1
2      , g        , <null>
2      , <null>   , 1
2      , <null>   , 2

那么有没有办法让他们获得两个共享行,只使用最长列表中的行数?

1 个答案:

答案 0 :(得分:2)

可以为您提供“交错”输出的一件事是unnest() function with multiple parameters (or its equivalent: the ROWS FROM(...) construct)

  

表函数也可以使用ROWS FROM语法组合,结果以并行列返回;在这种情况下,结果行的数量是最大函数结果的数量,较小的结果用null填充   值匹配。
  ...
  可以使用任意数量的数组参数调用特殊表函数UNNEST,并返回相应数量的列,就像分别在每个参数上调用UNNEST并使用{{1}组合一样构造。

ROWS FROM

http://rextester.com/QSWESJ84203

注意:这是一个“相对”的新功能:它是在9.4中引入的