2017-09-26 66 views
0

我有3个数据库,我需要提取数据(我们称之为DB1,DB2和DB3)。 从DB1我选择返回像这样的查询:“有条件”加入到不同的表

ORDER  DESC  TOTAL ORGANIZATION 
============================================= 
262  Order1 5129  116 
629  Order2 123  138 
915  Order3 95   138 
159  Order4 1932  116 

,然后从DB2和DB3我选择该信息(包括表是相同的,但与diferent组织diferente数据)

DB2 (ORG 116):

ORDER  TYPE 
================== 
262  2 
159  5 
856  3 
629  2 

DB3(ORG 138):

ORDER  TYPE 
================== 
629  1 
915  4 
012  1 
262  5 

正如你所看到的,两个组织都可以让它们具有相同的订单号,但是不同类型。

如何将DB1与DB2和/或DB3一起提取TYPE列,但是根据DB1组织列查找不同的DB?

结果会是这样:

ORDER  DESC  TOTAL ORGANIZATION  TYPE 
=========================================================== 
262  Order1 5129   116    2 
629  Order2 123   138    1 
915  Order3 95   138    4 
159  Order4 1932   116    5 

正如你所看到的,对于订单262我得到了2型从DB2(而不是从DB3因为ORG是116)和ORDER 629我从拿到1型DB3(不是来自DB2,因为ORG是138)

我的简单查询会是这样的(我使用WITH ... AS,因为querys非常长,每个来自不同的服务器,所以这样一切似乎更多有组织):

With EAM as (
Select Order, Desc, Total, Organization 
from Table1 
), 
AP116 as (
select order, type 
from table2 
), 
AP138 as (
select order, type 
from table3 
) 
select * 
from EAM inner join AP116 on EAM.order = AP116.order 

此查询正常工作,但将所有订单链接到AP116。我需要使用一个CASE或其他东西来让我选择AP116或AP138,这取决于最后一行的ORG。

+0

'LEFT JOIN'的所有表,只是选择你需要用'CASE'语句中的值? – DavidG

回答

2

对于离散集不同的数据库,我建议写这为工会:

Select Order, Desc, Total, Organization, Table2.Type 
from Table1 
join Table2 on... 
where Organization = 116 

union 

Select Order, Desc, Total, Organization, Table3.Type 
from Table1 
join Table3 on... 
where Organization = 138