2013-07-13 1 views
1

Comment faire pour modifier la table à se joindre en fonction de certaines conditions? J'ai une table Master et 2 tables enfants, Child1, Child2. Il y a un champ ChildType.Comment faire pour modifier la table à rejoindre en fonction de la condition

L'exigence est de joindre les tables enfant à la table principale en fonction du type de l'enfant. Dans le résultat, MasterID et ChildName est requis.

Ce qui suit est la requête en utilisant 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 

Je veux écrire cette requête sans utiliser UNION, et à l'aide de jointure externe. Raison, à la fois enfant et maître dans la requête réelle provient de plusieurs tables, et je veux éviter la répétition.

Répondre

1

Si elles sont mutuellement exclusives, peut-être quelque chose comme ceci:

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) 

Sinon, utilisez le champ ChildType dans le cas.

0

Essayez

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 

est ici SQLFiddle Démo

Questions connexes