我想要一种方法将所有这些Oracle查询合并为一个

我想要一种方法将所有这些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 
+0

OP应该可能在这里使用'UNION ALL'而不是'UNION'。 –

必须有某种关键参加由的。选择任何字段生成唯一的项目关键字,然后对这些字段上的每个查询执行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个查询

+0

谢谢我会试试你的解决方案。谢谢 – HushMamba

+0

我得到列明确定义错误,不确定模糊来自哪里。 – HushMamba

从表中选择所有列的顺序相同,并使用联合来合并它们会产生所需的结果。