PL SQL连接2个结果集

时间:2009-11-23 14:04:57

标签: oracle plsql

我需要得到连接2个类似查询的结果集的结果。由于某种原因,必须将原始查询拆分为2,两者都有相应的order by子句。应该是这样的(这是对原始查询的过度简化)

Query1: Select name, age from person where age=10
Resultset1: 
Person1, 10
Person3, 10

Query2: Select name, age from person where age=20
Resultset1: 
Person2, 20
Person6, 20

The expected result:
Person1, 10
Person3, 10
Person2, 20
Person6, 20

我不能简单地使用Query1 UNION Query2。

低于2个原始查询: (#1)

select cp.CP_ID, cpi.CI_DESCRIPCION, cp.CP_CODIGOJERARQUIZADO, cp.CP_ESGASTO as gasto, cp.CP_CONCEPTOPADRE, LEVEL
from TGCCP_ConceptoPagoIng cp
left join tgcci_ConceptoPagoIngIdioma cpi on cpi.CI_IDCONCEPTOPAGOING = cp.CP_ID and cpi.CI_IDIDIOMA = 1
start with ((CP_CONCEPTOPADRE is null) and (**cp.CP_ESGASTO = 1**))
connect by prior cp.CP_ID = cp.CP_CONCEPTOPADRE
order siblings by CP_CODIGOJERARQUIZADO

(#2)

select cp.CP_ID, cpi.CI_DESCRIPCION, cp.CP_CODIGOJERARQUIZADO, cp.CP_ESGASTO as gasto, cp.CP_CONCEPTOPADRE, LEVEL
from TGCCP_ConceptoPagoIng cp
left join tgcci_ConceptoPagoIngIdioma cpi on cpi.CI_IDCONCEPTOPAGOING = cp.CP_ID and cpi.CI_IDIDIOMA = 1
start with ((CP_CONCEPTOPADRE is null) and (**cp.CP_ESGASTO = 2**))
connect by prior cp.CP_ID = cp.CP_CONCEPTOPADRE
order siblings by CP_CODIGOJERARQUIZADO

6 个答案:

答案 0 :(得分:1)

我想你想要一个

select * from ( first query )
UNION ALL
select * from ( second query )

first querysecond query是来自上方的查询,因此您将它们转换为子查询,从而通过子句保留顺序。

答案 1 :(得分:0)

好吧,好吧,我不完全确定你为什么需要这种方式,但是如果Oracle不允许你做UNION,或者当你这样做时它会搞砸订单,我会尝试创建一个流水线表功能。 An example here

基本上,你创建一个程序来运行两个查询,首先是一个查询,然后是另一个查询,将每个查询的结果放入返回的数据集中。

答案 2 :(得分:0)

看起来您正在寻找MULTISET UNION。只能从版本10开始使用。

此致 罗布。

答案 3 :(得分:0)

您可以将查询组合为子查询,并通过外部查询执行单个订单:

select * from (
<query 1 with its order by> 
UNION ALL
<query 2 with its order by>
)
order by column1, column2;

或者,您可以在PL / SQL中实现与两个游标相当的排序合并连接,但这不必要地复杂。

答案 4 :(得分:0)

这个解决方案非常有效:

select * from(first query) UNION ALL select * from(second query)

我感谢所有花时间回答的人。 问候。

答案 5 :(得分:0)

对于你的例子:

从(10,20)年龄的人中选择姓名,年龄 要么 从年龄= 10岁或年龄= 20岁的人中选择姓名,年龄

但是我猜这不是你需要的:)