sql >> Base de Datos >  >> RDS >> Oracle

La mejor manera de unir tablas de padres e hijos

Dado que un padre puede tener una fila secundaria en algunas de esas tablas, debe usar LEFT OUTER JOIN.

LEFT OUTER JOIN une dos tablas devolviendo todas las filas de la tabla LEFT, en este caso A y todas las coincidencias de las otras tablas. Cuando no haya coincidencia devolverá NULL en las columnas correspondientes de las tablas que no hubo coincidencia.

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

EDITAR

He agregado una forma de agregar subhijos. Los he intentado más solo para hacerlos obvios en una representación visual. Pero cuidado... si esto lleva a que los subhijos tengan otros subhijos, etc., tal vez su estructura no sea la óptima.