Oracle
 sql >> Database >  >> RDS >> Oracle

Il modo migliore per unire tabelle padre e figlio

Poiché un genitore può avere una riga figlio in alcune di queste tabelle, è necessario utilizzare LEFT OUTER JOIN.

LEFT OUTER JOIN unisce due tabelle restituendo tutte le righe della tabella LEFT, in questo caso A e tutte le corrispondenze delle altre tabelle. Quando non c'è corrispondenza restituirà NULL nelle colonne corrispondenti delle tabelle che non c'era corrispondenza.

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

MODIFICA

Ho aggiunto un modo per aggiungere subchild. Li ho intenzionati più solo per renderli evidenti in una rappresentazione visiva. Ma attenzione... se questo porta ad avere altri sottofigli, ecc. forse la tua struttura non è ottimale.