简单的解决方案:
的Hierarchy
表INNER JOIN
本身与ON T1.IDChild = T2.IDParent
条款。 使用尽可能多的INNER JOIN Hierarchy T2 ON T1.IDChild = T2.IDParent
子句,因为您需要获取更多层次结构级别。
CREATE TABLE Hierarchy (IDParent int, IDChild int, Level int, Value int);
INSERT Hierarchy VALUES (1,2,0,500),(2,3,1,700),(3,4,2,900);
SELECT T1.IDChild, T1.IDParent, T2.IDChild, T2.IDParent, T3.IDChild, T3.IDParent
FROM Hierarchy T1
INNER JOIN Hierarchy T2 ON T1.IDChild = T2.IDParent
INNER JOIN Hierarchy T3 ON T2.IDChild = T3.IDParent
CTE(公共表表达式)解决方案: 锚段将得到树的根和递归成员定义将得到所有其他记录。
WITH CTE (IDParent, IDChild, [Level], Value, LVL)
AS
(
-- Anchor member definition
SELECT IDParent, IDChild, [Level], Value, 0 as LVL
FROM Hierarchy AS h
WHERE h.IDParent = 1
UNION ALL
-- Recursive member definition : will help us calculate true on-the-fly recursive hierarchy levels
SELECT h.IDParent, h.IDChild, h.[Level], h.Value, LVL + 1
FROM Hierarchy AS h
INNER JOIN CTE
ON h.IDParent = CTE.IDChild
where (h.IDChild <> 1)
)
select * from CTE
您正在使用哪个数据库管理系统? –