首页 > 解决方案 > 合并Oracle中两个表的数据集

问题描述

我在两个表中有以下示例数据:

表格1

Item Loc Hierarchy Val1 Val2 Val3 Val4
I1   L1  Item      null null null D1
I2   L2  Item      null null null D2
I2   L3  Item      null null null D3

表2

Item Loc Hierarchy Val1 Val2 Val3 Val4
     L1  ' '       A1   B1   C1   null
     L4  ' '       A4   B4   C4   null

基本上 -

在 Table1 中,Val1、Val2、Val3 为 null 的一行,在 Table2
中 Val1、Val2、Val3 的值和 Val4 为 null 的另一行。

Table1 中只有一行 Val1,2,3 值和 Val4 为空;表 2 中没有行。

表2中只有一行Val4值和Val1,2,3为null;表 1 中没有具有 Val1、2、3 值的行。

预期结果-

Item Loc Hierarchy Val1 Val2 Val3 Val4
I1   L1  Item      A1    B1   C1   D1
I2   L2  Item      null null null D2
I2   L3  Item      null null null D3
     L4  ' '       A4   B4   C4   null

如何组合数据并达到预期的结果?通过完全外连接?是否有任何其他替代方法可以提高性能或提高完整外连接查询。由于这是一个更大查询的子集,因此一旦我得到这个结果,我必须使用这个数据集来更新另一个有大约 100M 记录的表(因此寻找性能高效的块)。

提前致谢!

标签: oracle12c

解决方案


使用联合查询:

SELECT
    MAX(Item) AS Item,
    Loc,
    CASE WHEN COUNT(CASE WHEN Hierarchy <> ' ' THEN 1 END) > 0
         THEN MAX(CASE WHEN Hierarchy = ' ' THEN NULL ELSE Hierarchy END)
         ELSE MAX(Hierarchy) END AS Hierarchy,
    MAX(Val1) AS Val1,
    MAX(Val2) AS Val2,
    MAX(Val3) AS Val3,
    MAX(Val4) AS Val4
FROM
(
    SELECT Item, Loc, Hierarchy, Val1, Val2, Val3, Val4 FROM Table1
    UNION ALL
    SELECT Item, Loc, Hierarchy, Val1, Val2, Val3, Val4 FROM Table2
) t
GROUP BY
    Loc
ORDER BY
    Loc;

推荐阅读