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

时间:2013-08-08 12:38:53

标签: sql database oracle view

我有父表AA包含的子表很少,例如BCDEFG 子表没有相互链接。它们仅与A相关联。 A有一个键Id,在所有子表中用作外键。

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

2 个答案:

答案 0 :(得分: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

修改

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

答案 1 :(得分:2)

select <wanted columns>
from a
left join b
on a.id = b.a_id
left join c
on a.id = c.a_id
left join d
on a.id = d.a_id