由于父级可能在某些表中具有子行,因此必须使用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)
编辑
我添加了一种添加子项的方法.我更倾向于他们,只是为了让他们在视觉表现中显而易见.但要注意......如果这导致子孙有其他子孙等,也许你的结构不是最优的.