2

我需要以递归方式从表中获取数据。数据就像会有一个父母,其中有很多孩子。数据的结构就像一棵树,但每个节点都有多个子节点。

表结构如下:

Description----column name
--------------------------
key of the item---key
parent of the item----parent

我可以从另一个表中获取根的密钥,如下所示:

select key from BSC where name="0201".

使用这把钥匙,我需要把所有的孩子都带到这棵树的叶子上。

我唯一的输入是项目的名称。如果我想要根的孩子,我可以使用:

select bpkey from MYTABLE where parent in (select bpkey from BSC where name="0201")

但这只是根的孩子。我需要获取孩子和孩子的孩子......而且它还在继续。

但我需要获取该树中的所有键。

我不太擅长编写 sql 查询。可能我认为我们需要在这里进行递归和存储过程。

有人可以帮忙吗?

4

2 回答 2

0

假设您有一个临时表来保存层次结构的结果。

create table #temp2(id int, parentid int null)

插入您期望从中获得层次结构结果的唯一记录。

declare loop cursor
   for select * from #temp2
go

declare @id int
declare @parentid int

open loop
fetch loop
    into @id, @parentid
while(@@sqlstatus = 0)
begin 

insert into #temp2
select id,parentid from #temp1 where parentid=@id

fetch loop
    into @id, @parentid
end
close loop
DEALLOCATE cursor loop

上述查询还假设源表为#temp1,结果表为#temp2

于 2012-08-14T10:15:22.857 回答
0

如果您的 Sybase 版本支持公用表表达式(即:sql 任何地方)

;with cte as
(
    select [key], parent from yourtable
    union all
    select t1.[key], t2.parent from yourtable t1
    inner join cte t2 on t1.parent=t2.[key]
)
    select * from cte where parent= [parent to search for]
于 2012-08-14T10:42:17.620 回答