简体   繁体   English

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

[英]how to retrieve tree data with one sql query with sybase ase 12.5?

suppose I have a tree data stored in mytab with id, parentid, then I want to get all parents for each id in one query. 假设我有一个树数据存储在mytab中,其id为parentid,那么我想在一个查询中获取每个id的所有父母。 For example, a binary tree like(node 1 parent is null): 例如,二叉树(节点1的父级为null):

           1
    11          12

111    112   121   122

for any node, find out all parents with parent level(from bottom to top). 对于任何节点,找出具有父级(从下到上)的所有父级。

for example, node 111: I want to have data like: 例如,节点111:我想要的数据如下:

id parentid level
111    11       1    
11     1        2

for node 11, I want to have data like: 对于节点11,我希望具有以下数据:

id parentid level
111    11       1    

for node 121, I want to have data like: 对于节点121,我希望具有以下数据:

id parentid level
121    12       1    
12     1        2

and so on. 等等。 Without cursor with loop, how to get it in one query(maybe a recursive query)? 没有带循环的游标,如何在一个查询(可能是递归查询)中获取它?

the depth of the tree could be more than 100. so recursive proc/trigger also not working as ase 12.5 nest level limit is 16. 树的深度可能超过100。因此,递归proc / trigger也不起作用,因为ase 12.5嵌套级别限制为16。

Something like this: 像这样:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM