我有多个结果集(它们实际上是内联视图的结果),每个结果集都提供不同的属性,我想在两个ID上将它们组合在一起。使用Oracle SQL执行此操作的最有效方法是什么?
我不认为我可以只使用UNION,因为那样我会得到多行具有相同的两个ID,并且属性在它们之间展开 - 我希望所有具有相同两个ID的行都可以折叠成一行。
示例:
表A:
MAIN_ID SUB_ID ATTRIB_A ATTRIB_B
1 100 100 Red
1 101 150 Green
2 300 125 Orange
表B:
MAIN_ID SUB_ID ATTRIB_C ATTRIB_D
1 101 High 25
2 120 Medium 10
2 300 Low 20
我想编写一个查询,其结果集如下所示:
MAIN_ID SUB_ID ATTRIB_A ATTRIB_B ATTRIB_C ATTRIB_D
1 100 100 Red <NULL> <NULL>
1 101 150 Green High 25
2 120 <NULL> <NULL> Medium 10
2 300 125 Orange Low 20
但是怎么样?
答案 0 :(得分:1)
您想要一个完整的外部联接:
select coalesce(a.main_id, b.main_id) as main_id,
coalesce(a.sub_id, b.sub_id) as sub_id,
a.attrib_a, a.attrib_b, b.attrib_c, b.attrib_c
from tableA a full outer join
tableB b
on a.main_id = b.main_id and a.sub_id = b.sub_id;