SQL 文件和路径名的递归连接

SQL Recursive concatenation of a file and path name

我实在想不通...我在 SQL 服务器中有 3 个相关表:

FileIds

  Id
  FileName

FolderIds

  Id
  ParentId
  FolderName

文件信息

  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

文件信息

  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 替换为 \'s),我需要创建一个显示完整路径的视图......它在 C# 之类的代码中很容易将各个部分组合在一起,但我似乎无法弄清楚 SQL 中如何进行。我已经查看了 SQL 服务器的递归 CTE,但我就是不明白。

这应该允许您开始使用递归 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