Tôi có bốn bảng, TopLevelParent, hai bảng ở giữa MidParentA và MidParentB và bảng con có thể có cha hoặc mẹ của MidParentA hoặc MidParentB (Một hoặc midParent khác phải ở trong địa điểm). Cả hai bảng ở giữa đều có một bảng cha của TopLevelParent.Máy chủ SQL còn lại tham gia với toán tử 'Hoặc'
Top Cấp bảng nhìn như thế này:
TopLevelId | Name
--------------------------
1 | name1
2 | name2
Các bảng MidParent trông như thế này:
MidParentAId | TopLevelParentId | MidParentBId | TopLevelParentId |
------------------------------------ ------------------------------------
1 | 1 | 1 | 1 |
2 | 1 | 2 | 1 |
Bảng Child giống như thế này:
ChildId | MidParentAId | MidParentBId
--------------------------------
1 | 1 | NULL
2 | NULL | 2
Tôi đã sử dụng bên trái sau đây tham gia vào một thủ tục được lưu trữ lớn hơn mà là thời gian ra, và nó trông giống như HOẶC operato r vào cuối cùng bên trái tham gia là thủ phạm:
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
Có cách nào hiệu quả hơn để thực hiện việc này không?
Đây là một số kinh doanh phức tạp – Roel