SQL递归查询和输出
使用以下SQL语句创建表并插入值:SQL递归查询和输出,sql,hierarchical-data,recursive-query,Sql,Hierarchical Data,Recursive Query,使用以下SQL语句创建表并插入值: create table tb(id int , pid int , name nvarchar(10)) insert into tb values( 1 , null , 'A') insert into tb values( 2 , null , 'B') insert into tb values( 3 , null , 'C') insert into tb values( 4 , 1 , 'D') insert into tb values( 5
create table tb(id int , pid int , name nvarchar(10))
insert into tb values( 1 , null , 'A')
insert into tb values( 2 , null , 'B')
insert into tb values( 3 , null , 'C')
insert into tb values( 4 , 1 , 'D')
insert into tb values( 5 , 1 , 'E')
insert into tb values( 6 , 2 , 'F')
insert into tb values( 7 , 3 , 'G')
insert into tb values( 8 , 4 , 'H')
insert into tb values( 9 , 5 , 'I')
我希望最终输出显示这棵树从根到叶的每一行,如下所示:
A-D-H
A-E-I
B-F
C-G
有人知道如何编写SQL过程来执行此操作吗?谢谢。如果您使用的是SQL Server,则可以使用递归查询来解决此问题。Oracle和PostgreSQL中也可以使用类似的方法
with rcte as
(
select t1.id, t1.pid, cast(t1.name as nvarchar(100)) name
from tb t1
where not exists (select 1 from tb t2 where t2.pid = t1.id)
union all
select tb.id, tb.pid, cast(concat(tb.name, '-', rcte.name) as nvarchar(100)) name
from rcte
join tb on rcte.pid = tb.id
)
select name
from rcte
where rcte.pid is null
它首先找到叶节点,然后遍历到根节点。您使用的是哪种dbms?