Mam cztery tabele, TopLevelParent, dwie tabele średniego poziomu MidParentA i MidParentB oraz tabelę Child, która może mieć rodzica MidParentA lub MidParentB (Jeden lub drugi midParent musi być w miejsce). Obie tabele na poziomie średnim mają tabelę nadrzędną TopLevelParent.Serwer SQL został połączony z operatorem "Lub"
tabela wygląd Top Level tak:
TopLevelId | Name
--------------------------
1 | name1
2 | name2
Tabele MidParent wyglądać następująco:
MidParentAId | TopLevelParentId | MidParentBId | TopLevelParentId |
------------------------------------ ------------------------------------
1 | 1 | 1 | 1 |
2 | 1 | 2 | 1 |
tabeli podrzędnej wyglądać następująco:
ChildId | MidParentAId | MidParentBId
--------------------------------
1 | 1 | NULL
2 | NULL | 2
Użyłem następujące po lewej stronie dołączyć w większej procedura przechowywana, która jest limit czasu i wygląda jak operato OR r na ostatnim sprzężeniu po lewej jest winowajcą:
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
Czy istnieje bardziej wydajny sposób, aby to dołączyć?
To jest trochę skomplikowana sprawa – Roel