假设非常简单的架构
表格主要
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
那么有没有办法让他们获得两个共享行,只使用最长列表中的行数?
答案 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中引入的