sql - 如何制作一个sql循环?

标签 sql recursive-query

这是简化的表格

filesystem (id, name, parentId);

和一些条目

(1, 'root', NULL)
(2, 'folder', 1)
(3, 'subfolder', 2)
(4, 'subsubfolder', 3)

有没有办法使用原生 SQL 来打印一个条目的绝对路径?

例如,最后一个条目将打印“root/folder/subfolder/subsubfolder”。条目 2 将打印“root/folder”等等。

最佳答案

你可以这样做

 with tree(id, Level, Hierarchy) as
(
 select id, 0, cast(Name as varchar(max))
   from filesystem
 union all
 select a.id, b.Level+1,
   b.Hierarchy+'/'+a.Name
  from filesystem a
  inner join tree b on a.parentid=b.id
)
select top(1) id, Hierarchy
 from tree
 where id=4
 order by Level desc 

它将为您提供带有完整文件路径的 ID。 详细阅读可以check this

关于sql - 如何制作一个sql循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30136626/

相关文章:

MySQL - 仅当最后关联状态 = 2 时才计数

php - 递归获取 parent 姓名

sql-server - 是否可以强制SQL Server使用我想要优化递归cte查询的计划

sql - Oracle - 仅返回最早日期当前或将来的日期

php - 如何使用 sql 只选择大于 0 的值?

mysql - 通过输入限制 sql 函数生成的行数

mysql - SQL查找最大共同出现次数

mysql - 递归连接sql中的列

sql-server - 递归过程中的 SUM

postgresql - 递归 CTE 将字段与父级从任意点连接起来