SQL Server оставил соединение с оператором «или»

У меня есть четыре таблицы, TopLevelParent, две таблицы среднего уровня MidParentA и MidParentB и дочерняя таблица, у которой может быть родительский элемент MidParentA или MidParentB (одна или другая средняя родительская точка должна быть на месте). Обе таблицы среднего уровня имеют родительскую таблицу TopLevelParent.

Таблица верхнего уровня выглядит следующим образом:

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

Таблицы MidParent выглядят так:

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

Детский стол выглядит так:

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

Я использовал следующее левое соединение в более крупной хранимой процедуре, для которой истекло время ожидания, и похоже, что оператор OR в последнем левом соединении является виновником:

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

Есть ли более эффективный способ сделать это соединение?

Ответы на вопрос(4)

Ваш ответ на вопрос