2010-01-19 49 views
3

说我有一个项目表表示一个树状结构化数据,我想不断追查,直到我到达顶层节点,由parent_id标记为NULL。我的MS SQL CTE(公用表表达式)看起来像什么?如何使用CTE来映射亲子关系?

例如,如果我是去从德尔到达顶部的路径,它看起来像

喜剧

飞出个未来

德尔

谢谢,这里的示例数据:

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 
+2

哎,+1戴恩库克是无趣 – dan 2010-01-19 04:41:11

回答

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