首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL递归连接文件和路径名

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

Stack Overflow用户
提问于 2018-02-16 16:27:36
回答 1查看 420关注 0票数 1

我就是不能把头绕在这上面.Server中有三个相关的表:

FileIds

代码语言:javascript
复制
  Id
  FileName

FolderIds

代码语言:javascript
复制
  Id
  ParentId
  FolderName

FileInfo

代码语言:javascript
复制
  Id
  FolderId
  FileId
  FileAuthorId
  FileClientId

样本数据:

FileIds

代码语言:javascript
复制
  1, Gartner
  2, Parker
  3, Stepp

FolderIds

代码语言:javascript
复制
  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

代码语言:javascript
复制
  1, 8, 1, null, null
  2, 5, 2, null, null
  3, 6, 3, null null

从视图中输出的样本:

代码语言:javascript
复制
  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和: is with \'s),我需要创建一个显示完整路径的视图.将这些部分放在代码(如C# )中是很容易的,但我似乎不知道如何在SQL中实现它。我已经查找了Server的递归CTE,但我没有得到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-16 17:07:16

这应该允许您开始使用递归CTE:

在这里,我只添加文件夹,但您可以完全相同,在另一个CTE中添加文件

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48830981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档