使用Oracle SQL结合这些结果的最佳方法?

时间:2014-05-08 01:32:51

标签: sql oracle

我有多个结果集(它们实际上是内联视图的结果),每个结果集都提供不同的属性,我想在两个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

但是怎么样?

1 个答案:

答案 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;