我想要一种方法将所有这些Oracle查询合并为一个
问题描述:
select
UNIT,
NBR,
ODE,
ANS,
IT,
UNIT,
ESC,
DATE1,
DATE2,
CD,
CD2,
CD3,
TRANS
from Jblog
where UNIT = 'Alaska'
AND DATE1 > 0 and
DATE2 > 0
AND ODE = '67342'
AND NBR = '50952'
select
UNIT,
TRANS,
ELER,
ELER_DATE,
ELERDATE2,
TRANS
from JBLOG
where unit = 'ALASKA'
AND ELER <> ' '
and ELERDATE > 0 and
ELERDATE2 > 0
and ELER = '5201'
select
UNIT,
TRANS,
LNT,
LNT_MIN,
LNT_MAX,
LNT_D,
LNT_DATE1,
LNT_DATE2,
LNT_DATE3,
LNT_AL,
TRANS
from JBLOG
where UNIT = 'ALASKA'
AND LNT_DATE <> 0
AND LNT_DATE2 > 0 and
LNT_DATE3> 0
AND LNT_D = '0064'
我希望能够将所有这些查询合并为一个查询。数据 是不同的,所以如果我只是直接将它们合并,并有一个长和 子句与一堆和我不会得到任何结果,因为排除 将使它不会返回任何数据。但是,当我单独运行它们时,我会得到期望的结果。我试过工会,它并没有完全解决,有没有人有解决方案?在此先感谢我想要一种方法将所有这些Oracle查询合并为一个
答
UNION
应该解决您的问题,但请注意,UNION
要求要组合的查询必须返回相同的属性序列(关于名称和类型)。
因此,当上述查询与UNION
合并时,每个查询必须选择相同的属性序列;如果特定查询中某些特定属性没有意义,即使您选择了默认值,仍然必须提供它们。
例如,下面的查询应该工作:
select a, b, NULL as c
from table1
where a>5
union
select a, NULL as b, c
from table1
where a<=5
而以下查询则没有:
select a, b
from table1
where a>5
union
select a, c
from table1
where a<=5
答
必须有某种关键参加由的。选择任何字段生成唯一的项目关键字,然后对这些字段上的每个查询执行LEFT JOIN到主列表。
由于您的查询筛选出来,不一定会适当加入的一切,再加一层到挑选一切没有任何过滤查询,以便你可以加入一切吧:
select *
from
(select UNIT /*or key whatever*/ from Jblog) all_units
LEFT JOIN
(.....) a
ON a.unit = all_units.unit
LEFT JOIN
(.....) b
ON b.unit = all_units.unit
LEFT JOIN
(.....) c
ON c.unit = all_units.unit
哪里a,b和c是您列出的3个查询
答
从表中选择所有列的顺序相同,并使用联合来合并它们会产生所需的结果。
OP应该可能在这里使用'UNION ALL'而不是'UNION'。 –