Da en forælder kan have en underordnet række i nogle af disse tabeller, skal du bruge LEFT OUTER JOIN.
LEFT OUTER JOIN forbinder to tabeller og returnerer alle rækkerne i LEFT-tabellen, i dette tilfælde A og alle matchene fra de andre tabeller. Når der ikke er noget match, vil det returnere NULL i de tilsvarende kolonner i tabellerne, som der ikke var match.
SELECT *
FROM A
LEFT OUTER JOIN B
ON A.Id = B.ParentID
LEFT OUTER JOIN C
ON A.Id = C.ParentID
LEFT OUTER JOIN P
ON C.Id = P.ParentID
LEFT OUTER JOIN Q
ON C.Id = Q.ParentID
LEFT OUTER JOIN D
ON A.Id = D.ParentID
LEFT OUTER JOIN E
ON A.Id = E.ParentID
LEFT OUTER JOIN F
ON A.Id = F.ParentID
LEFT OUTER JOIN X
ON F.Id = X.ParentID
LEFT OUTER JOIN Y
ON F.Id = Y.ParentID
LEFT OUTER JOIN G
ON A.Id = G.ParentID
REDIGER
Jeg har tilføjet en måde at tilføje underordnede. Jeg har tænkt dem mere bare for at gøre dem tydelige i en visuel repræsentation. Men pas på...hvis dette fører til, at underbørn har andre underbørn osv., er din struktur måske ikke optimal.