加入父表和子表的最佳方法

use*_*047 1 sql database oracle view

我有父表A. A有几个子表,如B,C,D,E,F,G 子表不相互链接.它们只与...相关联A. A有一个键Id在所有子表中用作外键.

加入这些表的最佳方法是什么,以便我可以创建一个单独的视图?

Gia*_*los 5

由于父级可能在某些表中具有子行,因此必须使用LEFT OUTER JOIN.

LEFT OUTER JOIN连接两个表,返回LEFT表的所有行,在本例中为A,以及来自其他表的所有匹配.当没有匹配时,它将在没有匹配的表的相应列中返回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
Run Code Online (Sandbox Code Playgroud)

编辑

我添加了一种添加子项的方法.我更倾向于他们,只是为了让他们在视觉表现中显而易见.但要注意......如果这导致子孙有其他子孙等,也许你的结构不是最优的.