我无法绕过这个...我在SQL Server中有3个相关的表:
FileIds
Id
FileName
FolderIds
Id
ParentId
FolderName
的FileInfo
Id
FolderId
FileId
FileAuthorId
FileClientId
示例数据:
FileIds
1, Gartner
2, Parker
3, Stepp
FolderIds
1, null, Georgia
2, 1, Atlanta
3, 2, Terminus
4, 3, Suite 1500
5, 4, David Williams
6, 4, Lisa Davidson
7, 2, LaGrange
8, 7, Dena Pressley
的FileInfo
1, 8, 1, null, null
2, 5, 2, null, null
3, 6, 3, null null
视图的示例输出:
Georgia.Atlanta.LaGrange.Dena Pressley:Gartner, null, null
Georgia.Atlanta.Terminus.Suite 1500.David Williams:Parker, null, null
Georgia.Atlanta.Terminus.Suite 1500.Lisa Davidson:Stepp, null, null
虽然这不适用于文件目录,但它的布局就像一个(替换。' s和:' s)我需要创建一个显示的视图完整的路径...很容易将这些部分放在C#等代码中,但我似乎无法弄清楚如何在SQL中完成它。我已经查找了SQL Server的递归CTE,而我却没有得到它。
答案 0 :(得分:0)
这应该允许你开始使用递归CTE:
在这里我只添加文件夹,但你可以完全相同,在另一个CTE中添加文件
WITH folders (Id, ParentId, FolderName)
AS (
-- In here you select the first LEVEL
SELECT Id, ParentId, FolderName FROM FolderIds
WHERE ParentId IS NULL
UNION ALL
-- In here you join the previous LEVEL with new relative LEVELS
SELECT b.Id, b.ParentId, a.FolderName CONCAT ' ' CONCAT b.FolderName
FROM folders a
INNER JOIN FolderIds b
ON a.Id = b.ParentId
)
SELECT *
FROM folders