Oracle
 sql >> Base de données >  >> RDS >> Oracle

Meilleur moyen de joindre des tables parent et enfant

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.