我需要一个 SQL 查询给我一个项目的完整树路径。表格看起来像这样,MyItem_MyItemId 和 MyItemMapping_MyItemId 之间存在 1:n 关系。
表我的项目:
MyItem_MyItemId | MyItem_Title
1 | Desktop
2 | Workspace
3 | Folder1
4 | Folder2
5 | Folder3
6 | Folder4
...
表 MyItemMapping:
MyItemMapping_MyItemId | MyItemMapping_MyItemParentId
4 | 3
3 | 2
2 | 1
1 | NULL
5 | 2
6 | 2
...
现在我需要一个查询,它带来了 Folder2 的路径,例如“Desktop\Workspace\Folder1\Folder2.
我用递归查询(见下文)尝试了它,但 SQL Server 需要大约 10 秒来解决它。我在数据库中只有 5000 条记录。我可以弄清楚,通过这个查询,路径是为所有 5000 条记录计算的,但我只需要一项。有谁能够帮助我?
WITH
MyTable as
(
select MyItem_MyItemId, MyItem_Title, MyItemMapping_MyItemParentId
from MyItem inner join MyItemMapping on MyItem_MyItemId = MyItemMapping_MyItemId
),
RecursiveTable AS
(
select t.MyItem_MyItemId, t.MyItem_Title, t.MyItemMapping_MyItemParentId
from MyTable as t
Where MyItemMapping_MyItemParentId is null
union all
select t.MyItem_MyItemId, CAST(RecursiveTable.MyItem_Title + '\' + t.MyItem_Title AS NVARCHAR(max)), t.MyItemMapping_MyItemParentId
from MyTable as t
JOIN RecursiveTable ON RecursiveTable.MyItem_MyItemId = t.MyItemMapping_MyItemParentId
)
select MyItem_Title from RecursiveTable where MyItem_MyItemid = 4
非常感谢你。
最好的祝福。马克