SQL Server Left Join Avec 'Ou' Opérateur

J'ai un quatre tables, TopLevelParent, deux de niveau moyen tables MidParentA et MidParentB, et une table d'Enfant qui peut avoir un parent de MidParentA ou MidParentB (l'Un ou l'autre midParent doivent être en place). Les deux mi-hauteur des tables ont un parent, un tableau de TopLevelParent.

Le Haut Niveau de la table ressembler à ceci:

TopLevelId | Name
--------------------------
1          | name1   
2          | name2   

La MidParent tables ressembler à ceci:

MidParentAId | TopLevelParentId |           MidParentBId | TopLevelParentId |
------------------------------------       ------------------------------------
1            |        1         |           1            |        1         |
2            |        1         |           2            |        1         |

La table Enfant ressembler à ceci:

ChildId | MidParentAId | MidParentBId
--------------------------------
1       |     1        |   NULL
2       |    NULL      |     2

J'ai utilisé les suivants jointure gauche dans un plus grand procédure stockée qui est du timing, et il semble que l'opérateur OU sur la dernière jointure gauche est coupable:

SELECT *    
FROM TopLevelParent tlp
LEFT JOIN MidParentA a ON tlp.TopLevelPatientId = a.TopLevelPatientId
LEFT JOIN MidParentB a ON tlp.TopLevelPatientId = b.TopLevelPatientId
LEFT JOIN Child c ON c.ParentAId = a.ParentAId OR c.ParentBId = b.ParentBId

Est-il plus performant façon de le faire adhérer?

bonne question + bonnes réponses

OriginalL'auteur Declan McNulty | 2013-11-01