SQL Server Left Join Mit 'Oder' - Operator

Ich habe vier Tabellen, TopLevelParent, zwei mid-level-Tabellen MidParentA und MidParentB, und einer Untergeordneten Tabelle, die ein Elternteil MidParentA oder MidParentB (das Eine oder andere midParent muss vorhanden sein). Sowohl mid-level-Tabelle eine übergeordnete Tabelle der TopLevelParent.

Die Top-Level-Tabelle wie folgt Aussehen:

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

Den MidParent Tabellen wie folgt Aussehen:

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

Die Child-Tabelle wie folgt Aussehen:

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

Benutzt habe ich die folgenden left join in einen größeren gespeicherte Prozedur, die das timing, und es sieht aus wie der or-operator auf die letzten left join ist der übeltäter:

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

Ist es ein schneller Weg, dies zu tun beitreten?

  • gute Frage + gute Antworten
Schreibe einen Kommentar