Puisqu'un parent peut avoir une ligne enfant dans certaines de ces tables, vous devez utiliser LEFT OUTER JOIN.
LEFT OUTER JOIN joint deux tables en renvoyant toutes les lignes de la table LEFT, dans ce cas A et toutes les correspondances des autres tables. Lorsqu'il n'y a pas de correspondance, il renverra NULL dans les colonnes correspondantes des tables auxquelles il n'y avait pas de correspondance.
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
MODIFIER
J'ai ajouté un moyen d'ajouter des sous-enfants. Je les ai destinés plus juste à les rendre évidents dans une représentation visuelle. Mais attention... si cela conduit à des sous-enfants ayant d'autres sous-enfants, etc. peut-être que votre structure n'est pas optimale.