2013-03-26 52 views
0

我有一个表“规则”与几个ID是从3个表A,B,C的任一。如何加入这些表格

结构是这样的:


表=规则

柱= ID

ID 
-- 

222 

333 

555 

7899 

表= A

柱= ID,电子邮件

ID  Email 

111  [email protected] 
555  [email protected] 

表= B

柱= ID,电子邮件

ID  Email 

222  [email protected] 
7899  [email protected] 

表= C

柱= ID,电子邮件

ID  Email 

333  [email protected] 
444  [email protected] 

我需要像结果:

ID Email 

222 [email protected] 

333 [email protected] 

555 [email protected] 
7899 [email protected] 

注:A,B,C表中还包含一些更多的信息,它们并不完全相同。

+0

对不起,我有点unclear..Please看到我的编辑.. – James 2013-03-26 10:44:22

回答

0
SELECT d.* 
FROM rule 
CROSS APPLY 
     (
     SELECT id, email 
     FROM a 
     WHERE a.id = rule.id 
     UNION ALL 
     SELECT id, email 
     FROM b 
     WHERE b.id = rule.id 
     UNION ALL 
     SELECT id, email 
     FROM c 
     WHERE c.id = rule.id 
     ) d 

注意,如果id存在于多个表,从与id所有表中的记录将被退回。

+0

好吧..我确定..IDs是唯一的..我试试看吧 – James 2013-03-26 10:48:09

+0

CROSS APPLY没有必要,在这种情况下效率不高 – 2013-03-26 13:52:20

+0

@YouAreWhatYouIs:你是否提出了改变答案? – Quassnoi 2013-03-26 15:18:57

0
select 
    r.id, 
    e.email 
from rule r 
left outer join (
    select id, email from A 
    union all 
    select id, email from B 
    union all 
    select id, email from C 
    ) as e on r.id = e.id 

这将从“规则”表中返回的所有记录,即使有表A,B不匹配记录或C