2013-07-13 2 views
1

Как изменить таблицу для соединения на основе какого-либо условия?Как изменить таблицу для соединения на основе условия

У меня есть таблица Master и 2 таблицы для детей, Child1, Child2. Поле ChildType.

Требование заключается в присоединении таблиц «Дети» к таблице «Мастер» на основе типа дочернего элемента. В результате требуется MasterID и ChildName.

Ниже приводится запрос с использованием UNION

select m.MasterID, c1.ChildName from Master 
inner join Child1 c1 on c1.MasterId = m.MasterId 
UNION 
select m.MasterID, c2.ChildName from Master 
inner join Child1 c2 on c2.MasterId = m.MasterId 

Я хочу написать этот запрос без использования UNION и использования космического присоединиться. Разум, как дочерний, так и основной в фактическом запросе исходит из нескольких таблиц, и я хочу избежать повторения.

ответ

1

Если они взаимно исключают друг друга, возможно, что-то вроде этого:

SELECT m.MasterID 
     ,CASE WHEN c1.ChildName IS NULL THEN c2.ChildName ELSE c1.ChildName END AS ChildName 
    FROM Master m 
    LEFT JOIN Child1 c1 on (c1.MasterId = m.MasterId) 
    LEFT JOIN Child1 c2 on (c2.MasterId = m.MasterId) 

В противном случае, используйте поле ChildType в CASE.

0

Попробуйте

SELECT m.MasterId, COALESCE(c1.ChildName, c2.ChildName) ChildName 
    FROM Master m LEFT JOIN Child1 c1 
    ON m.MasterId = c1.MasterId 
    AND m.ChildType = 1 LEFT JOIN Child2 c2 
    ON m.MasterId = c2.MasterId 
    AND m.ChildType = 2 

Вот SQLFiddle демо

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