如何使用CTE映射父子关系?

时间:2010-01-19 04:23:10

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

假设我有一个表示树状结构化数据的项目表,我想继续向上跟踪,直到我到达顶级节点,标记为parent_id为NULL。我的MS SQL CTE (公用表表达式)是什么样的?

例如,如果我要从 Bender 获取到顶部的路径,它看起来像

喜剧

Futurama的

本德

谢谢,这是示例数据:

DECLARE @t Table(id int, description varchar(50), parent_id int)

INSERT INTO @T 
SELECT 1, 'Comedy', null UNION 
SELECT 2, 'Futurama', 1 UNION
SELECT 3, 'Dr. Zoidberg', 2 UNION 
SELECT 4, 'Bender', 2 UNION
SELECT 5, 'Stand-up', 1 UNION
SELECT 6, 'Unfunny', 5 UNION
SELECT 7, 'Dane Cook', 6

1 个答案:

答案 0 :(得分:4)

它应该是这样的:

declare @desc varchar(50)
set @desc = 'Bender'

;with Parentage as
(
    select * from @t where description = @desc
    union all

    select t.* 
    from @t t
    inner join Parentage p
        on t.id = p.parent_id
)
select * from Parentage
order by id asc --sorts it root-first 
相关问题