2013-03-26 40 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