sql - 在 Oracle 中合并两个结果集
问题描述
假设我们有 2 个选择结果:A 和 B:
所以 A 就像:
KEY VALUE
1 v1
1 v2
B 很简单:
KEY VALUE
1 v3
我需要合并这些集合KEY
以获得这样的结果:
A.KEY A.VALUE B.KEY B.VALUE
1 v1 1 v3
1 v2 null null
唯一想到的 - 使用full join
如下:
select A.*, B.*
from A
full join B on B.KEY = A.KEY
显然,它会导致不希望的结果:
A.KEY A.VALUE B.KEY B.VALUE
1 v1 1 v3
1 v2 1 v3
Oracle 中是否有任何选项可以执行所需的操作?
PS 这些只是指出问题的示例——将较小的结果集合并到较大的结果集,用null
. 真实的A
和B
更大,大小未知。我们不能VALUE
以某种方式引用列 - 它的内容也是未知的。
解决方案
您可以使用row_number()
枚举行并将其包含在join
条件中:
select A.*, B.*
from (select a.*, row_number() over (partition by key order by key) as seqnum
from a
) a full join
(select b.*, row_number() over (partition by key order by key) as seqnum
from b
) a full join
on b.k a.key and b.seqnum = a.seqnum;
或删除用于的重复列名join
:
select *
from (select a.*, row_number() over (partition by key order by key) as seqnum
from a
) a full join
(select b.*, row_number() over (partition by key order by key) as seqnum
from b
) a full join
using (key, seqnum);
推荐阅读
- bash - 防止 sed 中的 \S 匹配标签 (
,
) - javascript - 在 React-JavaScript/CSS 中单击时下拉箭头向下移动
- cmake - 在生成器表达式中正确使用平台变量
- web - Web App 是否可以用作 BLE 广告的低功耗蓝牙信标?
- powershell - 调用函数作为计算属性以显示 MB 和 GB Powershell 脚本
- c# - c#无法在linux中加载字体
- c# - 如何将此 SQL 代码转换为 LINQ 格式?
- symfony - 学说:计数左连接条件行
- java - 通过套接字从 Java 客户端向 NodeJS 服务器发送字符串也会发送不需要的字符
- php - 仅当 URL 参数存在时如何显示值?