0

我有一个表“规则”,其中有几个 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 表还包含更多信息,它们并不完全相同。

4

2 回答 2

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则将返回所有表中的记录。

于 2013-03-26T10:47:38.173 回答
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 中没有匹配的记录

于 2013-03-26T13:45:58.630 回答