Eftersom en förälder kan ha en underordnad rad i vissa av dessa tabeller måste du använda LEFT OUTER JOIN.
LEFT OUTER JOIN sammanfogar två tabeller och returnerar alla rader i den VÄNSTER tabellen, i detta fall A och alla matchningar från de andra tabellerna. När det inte finns någon matchning kommer det att returnera NULL i motsvarande kolumner i tabellerna att det inte fanns någon matchning.
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
REDIGERA
Jag har lagt till ett sätt att lägga till underordnade. Jag har tänkt dem mer bara för att göra dem uppenbara i en visuell representation. Men se upp...om detta leder till att underbarn har andra underbarn etc kanske din struktur inte är optimal.