2013-03-26 5 views
0

У меня есть одна таблица «Правило» с несколькими идентификаторами, которые находятся на любом из трех таблиц A, B, C.Как присоединиться к этим таблицам

Структура такова:


Таблица = Правило

Колонка = Идентификатор

ID 
-- 

222 

333 

555 

7899 

Таблица = A

Колонка = ID, электронная почта

ID  Email 

111  [email protected] 
555  [email protected] 

Таблица = В

Колонка = Идентификатор, E-mail

ID  Email 

222  [email protected] 
7899  [email protected] 

Таблица = С

Колонка = Идентификатор, электронная почта

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

ответ

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

ОК .. Я уверен..Ида уникальны .. мне дать его попробовать – James

+0

CROSS APPLY не является необходимым и не является более эффективным в этом случае –

+0

@YouAreWhatYouIs: вы предлагаете изменить ответ? – Quassnoi

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

Смежные вопросы