oracle12c - 合并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
基本上 -
层次结构列可以有“项目”或“”值。
可以存在多个 Item@Loc 组合。但只有在 Hierarchy 为 Item 时才会有 Item 条目;' ' 层次结构值的项目列将为空白。
Loc可以遵循可能的情况-
在 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 记录的表(因此寻找性能高效的块)。
提前致谢!
解决方案
使用联合查询:
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;
推荐阅读
- go - 使用 KMS 时尝试将某些代码转换为 Go CDK
- vb.net - 尝试将大量数据发送到 Web 服务时如何修复 404“未找到”错误
- linux - 如何运行,带有外部库的 python 脚本,并且只使用 venv
- ios - 使用 AppDelegate 作为单例定义 Core Data 的上下文
- javascript - 如何正确解码原始数据响应
- c# - Access difference Windows Service - User
- swift - PromiseKit:无法在 then 处理程序之间调用自定义代码
- javascript - 如何通过 chrome 上的 javascript 请求更多配额持久空间?
- c# - 在 Visual Studio 中调试异步 C#;按预期打破异常
- redhat - 在 vSphere 上的 RHEL 虚拟机上使用 Terraform 触发 virt-sysprep