假设我有一个存储在mytab中的树数据,其中包含id,parentid, 然后我想在一个查询中获取每个id的所有父母。 例如,二进制树(节点1父节点为空):
1
11 12
111 112 121 122
对于任何节点,找出所有父级别的父母(从下到上)。
例如,节点111:我想拥有如下数据:
id parentid level
111 11 1
11 1 2
对于节点11,我希望得到如下数据:
id parentid level
111 11 1
对于节点121,我希望有如下数据:
id parentid level
121 12 1
12 1 2
等等。 没有带循环的游标,如何在一个查询中获取它(可能是一个递归查询)?
树的深度可能超过100.因此递归proc /触发器也不起作为12.5嵌套级别限制为16。
答案 0 :(得分:0)
这样的事情:
DECLARE @id int = 111
;WITH CTE
AS
(
SELECT Id, ParentId, 1 as level FROM tbl WHERE Id = @id
UNION ALL
SELECT T2.Id, T2.ParentId, T1.level + 1 FROM CTE T1
JOIN tbl T2 ON T1.ParentId = T2.Id
)
SELECT * FROM CTE WHERE ParentId IS NOT NULL