我需要得到连接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
答案 0 :(得分:1)
我想你想要一个
select * from ( first query )
UNION ALL
select * from ( second query )
first query
和second 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岁的人中选择姓名,年龄
但是我猜这不是你需要的:)