从自引用表获取路径



我有一个带有自引用表的SQL Server数据库。结构的深度可以在1到20 之间

  • ID-主键
  • 名称-nvarchar(256(
  • ParentID-int

典型数据:

ParentId空
Id 名称
1 文件夹1
2 文件夹2 1
3 文件夹3 2
4 文件夹4 3

首先,您正在尝试筛选值​​在错误的地方。这不应该在CTE中完成,而应该在主查询中完成,因为CTE用于构建树并生成Name值。

其次,在加入CTE时,递归部分的CTE中出现错误。你有on parent.ParentId = a.Id,但你需要相反的on a.ParentId = parent.Id

所以你的查询会像这个

declare @id int;
set @id = 4;
WITH folder_tree AS (
SELECT 
id, 
CAST(name AS nvarchar(max)) AS name, 
parentid 
FROM folders 
WHERE parentid IS NULL
UNION ALL
SELECT 
f.id,
CAST(ft.name + '/' + f.name AS nvarchar(max)),
f.parentid 
FROM folders f
JOIN folder_tree ft ON f.parentid = ft.id
)
SELECT * FROM folder_tree
WHERE id = @id

查询输出

idnameparentid
4Folder1/Folder2/Folder3/Folder43

最新更新