如何使用sybase ase 12.5一个sql查询检索树数据?

时间:2014-05-14 18:57:05

标签: sql tsql sybase sybase-ase

假设我有一个存储在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。

1 个答案:

答案 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