Ponieważ rodzic może mieć wiersz podrzędny w niektórych z tych tabel, musisz użyć LEFT OUTER JOIN.
LEFT OUTER JOIN łączy dwie tabele, zwracając wszystkie wiersze tabeli LEFT, w tym przypadku A i wszystkie dopasowania z pozostałych tabel. Jeśli nie ma dopasowania, zwróci NULL w odpowiednich kolumnach tabel, w których nie było dopasowania.
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
EDYTUJ
Dodałem sposób na dodawanie podpotomków. Zamierzałem je bardziej po to, aby były oczywiste w wizualnej reprezentacji. Ale uważaj ... jeśli to prowadzi do pod-dzieci mają inne pod-dzieci itp., może twoja struktura nie jest optymalna.