如何加入这些表格

时间:2013-03-26 10:35:36

标签: sql sql-server join

我有一个表“规则”,其中有几个ID来自3个表 A,B,C 中的任意一个。

结构是这样的:


表=规则

列= ID

ID 
--

222

333

555

7899

表= A

列= ID,电子邮件

ID        Email

111       test111@gmail.com
555       test555@gmail.com

表= B

列= ID,电子邮件

ID        Email

222       test222@gmail.com
7899      test7899@gmail.com

表= C

列= ID,电子邮件

ID        Email

333       test333@gmail.com
444       test444@gmail.com

我需要结果如:

ID    Email

222   test222@gmail.com

333   test333@gmail.com

555   test555@gmail.com
7899  test7899@gmail.com

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

2 个答案:

答案 0 :(得分: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的所有表的记录。

答案 1 :(得分: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中没有匹配的记录