Ho quattro tabelle, TopLevelParent, due tabelle di livello medio MidParentA e MidParentB e una tabella figlio che può avere un parent di MidParentA o MidParentB (Uno o l'altro midParent deve essere in posto). Entrambe le tabelle di livello medio hanno una tabella padre di TopLevelParent.SQL Server Left Join con operatore "Or"
Il look tavolo di primo livello in questo modo:
TopLevelId | Name
--------------------------
1 | name1
2 | name2
Le tabelle MidParent simile a questa:
MidParentAId | TopLevelParentId | MidParentBId | TopLevelParentId |
------------------------------------ ------------------------------------
1 | 1 | 1 | 1 |
2 | 1 | 2 | 1 |
tabella figlio simile a questa:
ChildId | MidParentAId | MidParentBId
--------------------------------
1 | 1 | NULL
2 | NULL | 2
ho usato la seguente a sinistra si unisce a una stored procedure più grande che sta scadendo, e assomiglia all'operato OR r l'ultimo sinistra join è il colpevole:
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
Esiste un modo più performante per farlo aderire?
Questo è un affare complesso – Roel