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

时间:2017-04-06 21:13:59

标签: sql 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'

 

我希望能够将所有这些查询组合在一起并将其作为一个查询运行。数据 是不同的所以,如果我直接组合它们并且有一个很长的地方 带有一堆ands的条款我没有得到任何结果,因为排除 将使它不返回任何数据。但是,当我单独运行它时,我得到了所需的结果。我尝试过工会但是没有完全解决,有没有人有解决方案?提前致谢

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

必须有某种钥匙才能加入。选择创建唯一项密钥的任何字段,并对这些字段上的每个查询执行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个查询