SQL - 数据库层次结构

时间:2017-11-15 16:40:56

标签: sql sql-server common-table-expression

我有一张像这样的价值表

id | parent | folder_name
-------------------------
1  | 0      | Root
2  | 1      | NSW
3  | 1      | QLD
4  | 2      | Sydney
5  | 3      | Brisbane
从这张表中我想得到一个包含所有父母的文件夹,直到更高级别。示例:folder_name = Brisbane

id | parent | folder_name
-------------------------
5  | 3      | Brisbane
3  | 1      | QLD
1  | 0      | Root

我想在sql而不是JOIN

中使用CTE

任何帮助都会很棒

1 个答案:

答案 0 :(得分:1)

Recursive CTE正是您要找的

;WITH cte
     AS (SELECT *
         FROM   Yourtable
         WHERE  folder_name = 'Brisbane'
         UNION ALL
         SELECT b.*
         FROM   cte a
                INNER JOIN Yourtable b
                        ON a.parent = b.id)
SELECT *
FROM   cte