Oracle SQL Query简化查询涉及多个模式

时间:2016-05-03 16:31:29

标签: sql oracle

我有一个类似于下面的查询(简化了查询 - 我的查询要复杂得多),其中“select”中的所有列都是相同的。唯一的区别是我在6种不同的模式上运行查询。我目前正在使用union来检索数据 - 但是查询看起来很大且不可读。我可以使用更优雅的方法吗?

select name , employeeid , date from STRDB1.employee where...........
UNION
select name , employeeid , date from STRDB2.employee where...........
UNION
select name , employeeid , date from STRDB3.employee where...........
UNION
select name , employeeid , date from STRDB4.employee where...........

2 个答案:

答案 0 :(得分:2)

您可以使用common table expression /子查询将其组合一次,并在主查询中执行其余操作:

WITH cte_name AS
(
  select name , employeeid , date from STRDB1.employee where...........
  UNION
  select name , employeeid , date from STRDB2.employee where...........
  UNION
  select name , employeeid , date from STRDB3.employee where...........
  UNION
  select name , employeeid , date from STRDB4.employee where...........
)
SELECT *
FROM cte_name
WHERE ...
GROUP BY ...
ORDER BY ...

答案 1 :(得分:1)

您可以尝试完全外部联接:

通常,表A到表B的外连接将返回表A中的每个记录,如果它在表B中有配对,那么也将返回。将输出表A中的每一行,但表B中的某些行可能不会出现在结果集中。完整的外部联接将返回表A中的ebery行,以及表B中的每一行。

例如:

Select nvl(T1.name, T2.name, T3.Name...), 
nvl(T1.employeeid , T2.employeeid , T3.employeeid ...) ,...
from STRDB1.employee T1
full outer join STRDB2.employee T2
on T1.key=T2.key
full outer join STRDB3.employee T3
on T2.key=T3.key
....