Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
组合两个查询以在Oracle中获取同一行中的数据_Oracle_Oracle12c - Fatal编程技术网

组合两个查询以在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让我知道。享受你的假期:-)