组合两个查询以在Oracle中获取同一行中的数据
我创建了两个查询结果集,如下所示:组合两个查询以在Oracle中获取同一行中的数据,oracle,oracle12c,Oracle,Oracle12c,我创建了两个查询结果集,如下所示: ID Name Value Choice ID1 Name1 Value1 Choice1 1 abc 10 x 1 eft 10 y 2 def 20 x 2 bgf 20 y 问题1: ID Name Value Choice 1 abc 10 x 2 def 20 x 问题2: ID1 Name1 Value1 Choice1
ID Name Value Choice ID1 Name1 Value1 Choice1
1 abc 10 x 1 eft 10 y
2 def 20 x 2 bgf 20 y
问题1:
ID Name Value Choice
1 abc 10 x
2 def 20 x
问题2:
ID1 Name1 Value1 Choice1
1 eft 10 y
2 bgf 20 y
我添加了一个完整的外部联接,结果集如下
ID Name Value Choice ID1 Name1 Value1 Choice1
1 abc 10 x null null null null
2 def 20 x null null null null
null null null null 1 eft 10 y
null null null null 2 bgf 20 y
但我需要如下所示:
ID Name Value Choice ID1 Name1 Value1 Choice1
1 abc 10 x 1 eft 10 y
2 def 20 x 2 bgf 20 y
不确定我应该使用什么连接或逻辑。您从未向我们展示过您最初的两个查询,但我假设我们可以将它们包装为CTE。鉴于此,您在这里似乎需要的实际上是一个内部连接,而不是一个完整的外部连接:
WITH cte1 AS (
-- first query
),
cte2 AS (
-- second query
)
SELECT t1.ID, t1.Name, t1."Value", t1.Choice, t2.ID1, t2.Name1, t2.Value1, t2.Choice1
FROM cte2 t1
INNER JOIN cte2 t2
ON t1.ID = t2.ID1;
不确定完全联接条件是什么样子。然而,如果你想“并排获取记录”(如你评论中所述),你可以做如下事情
select *
from (
select 1 as id, 'abc' as name, 10 as value, 'x' as choice from dual union all
select 2, 'def', 20, 'x' from dual
) Q1 full outer join (
select 1 as id1, 'eft' as name1, 10 as value1, 'y' as choice1 from dual union all
select 2, 'bgf', 20, 'y' from dual
) Q2
on Q1.id = Q2.id1
;
-- result
ID NAME VALUE CHOICE ID1 NAME1 VALUE1 CHOICE1
1 abc 10 x 1 eft 10 y
2 def 20 x 2 bgf 20 y
当然,这将为不“匹配”的ID提供一些空值。Eg(相同连接,数据不同)
Pounder Stibbon(谢谢!)建议的解决方案可能会删除一些空值,但结果集的某些行中可能会有具有不同ID的记录
select *
from (
select id, name, value, choice, rownum row_
from (
select 1 as id, 'abc' as name, 10 as value, 'x' as choice from dual union all
select 2, 'def', 20, 'x' from dual union all
select 4, '_4_', 40, 'g' from dual
)
) Q1 full join (
select id1, name1, value1, choice1, rownum row_
from (
select 1 as id1, 'eft' as name1, 10 as value1, 'y' as choice1 from dual union all
select 2, 'bgf', 20, 'y' from dual union all
select 5, '_5_', 50, 'z' from dual
)
) Q2 on Q1.row_ = Q2.row_
;
-- result
ID NAME VALUE CHOICE ROW_ ID1 NAME1 VALUE1 CHOICE1 ROW_
1 abc 10 x 1 1 eft 10 y 1
2 def 20 x 2 2 bgf 20 y 2
4 _4_ 40 g 3 5 _5_ 50 z 3
请向我们展示原始的两个查询,最好是与示例数据一起。使用此列将
行数()
添加到两个查询和完全联接
它们。感谢回复,很遗憾,我无法公开查询,而且我需要两个查询中的完整数据,因此内部联接不是我的选项,为了使事情变得简单,我需要两个查询中的列合并并并排获取记录嗯…内部连接精确地生成您想要的结果集,并且考虑到您无法向我们显示查询,我恐怕我的答案(或与之非常类似的东西)会但内部连接排除了记录,但我需要所有记录。根据您向我们展示的数据,我已经给出了最佳答案。如果您需要更多帮助,请向我们展示真实的数据和查询。非常感谢您提供的解决方案,我将于明天休息一天尝试您的解决方案,并更新youThanks让我知道。享受你的假期:-)