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