SQL Server树层级查询:如何获取所有节点与后代节点的全部对应组合
SQL Server 递归查询全量文件夹祖先-后代对应组合
问题核心
原有递归逻辑仅存储单个节点的ID和直接父ID,没有传递祖先节点的关联上下文,因此只能输出直接父子节点对,无法生成隔代的对应关系。
修正后的查询语句
WITH RecursiveFolderRelations AS ( -- 锚点成员:先加载所有直接父子关联对 SELECT ParentId AS FolderId, Id AS DescendantFolderId FROM [Folders] WHERE ParentId IS NOT NULL UNION ALL -- 递归成员:将现有祖先ID与下一级后代节点关联,生成跨代对应关系 SELECT r.FolderId, f.Id AS DescendantFolderId FROM RecursiveFolderRelations r INNER JOIN [Folders] f ON r.DescendantFolderId = f.ParentId ) SELECT FolderId, DescendantFolderId FROM RecursiveFolderRelations ORDER BY FolderId, DescendantFolderId
逻辑说明
- 锚点阶段先获取所有一级父子关联,对应你原有查询的输出结果
- 递归阶段每次基于已有的关联对,把祖先ID和后代的子节点做绑定,例如锚点拿到
(2,4)的同时,会自动关联到2的祖先节点1,生成(1,4)的隔代关联 - 最终输出的结果天然去重,不需要额外加
DISTINCT关键字,执行效率更高
内容的提问来源于stack exchange,提问作者Vesuvian
相关产品推荐
相关产品推荐

