sql - t-sql 递归查询

标签 sql sql-server sql-server-2005 tsql

基于现有表,我使用 CTE 递归查询得出以下数据。但未能进一步应用它。

数据如下

id    name     parentid
--------------------------
1     project   0
2     structure 1
3     path_1    2
4     path_2    2
5     path_3    2
6     path_4    3
7     path_5    4
8     path_6    5

我想从上述数据递归地形成完整路径。意味着递归将给出以下输出。
FullPaths
-------------
Project
Project\Structure
Project\Structure\Path_1
Project\Structure\Path_2
Project\Structure\Path_3
Project\Structure\Path_1\path_4
Project\Structure\Path_2\path_5
Project\Structure\Path_3\path_6

谢谢

最佳答案

这是一个示例 CTE 来做到这一点:

declare @t table (id int, name varchar(max), parentid int)

insert into @t select 1,     'project'  , 0
union all select 2,     'structure' , 1
union all select 3,     'path_1'    , 2
union all select 4,     'path_2'    , 2
union all select 5,     'path_3'    , 2
union all select 6,     'path_4'    , 3
union all select 7,     'path_5'    , 4
union all select 8,     'path_6'    , 5

; with CteAlias as (
    select id, name, parentid
    from @t t
    where t.parentid = 0
    union all
    select t.id, parent.name + '\' + t.name, t.parentid
    from @t t
    inner join CteAlias parent on t.parentid = parent.id
)
select * 
from CteAlias

关于sql - t-sql 递归查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2739699/

相关文章:

php - 如何注销特定用户 session (php 和 mysql)

sql - 在 Postgres 的数组列中使用 UPCASE 或 Regexp

c# - 在哪里关闭SqlDataReader对象和SqlConnection对象?

sql - 根据另一列中的日期将列中的日期更改 30

sql - SQL Server 存储过程/查询的解释

mysql - 如何 "reverse"一个简单的 2 列关系表

php - 尽量减少 SQL 语句? - 堆栈 SQL 查询?

sql-server - 如何检查 VARCHAR 字符串是否(不是)十六进制?

c# - SQL 程序集和 SQL 注入(inject)

sql-server - 实现键、索引、约束的命名标准