これらのテーブルの一部には親が子行を持っている可能性があるため、LEFTOUTERJOINを使用する必要があります。
LEFT OUTER JOINは、LEFTテーブルのすべての行(この場合はA)と他のテーブルからのすべての一致を返す2つのテーブルを結合します。一致するものがない場合、一致しなかったテーブルの対応する列にNULLが返されます。
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
編集
サブチャイルドを追加する方法を追加しました。私はそれらを視覚的表現で明らかにするためだけにそれらをもっと意図しました。しかし、注意してください...これがサブチャイルドに他のサブチャイルドを持っているなどの場合、あなたの構造は最適ではないかもしれません。