代码之家  ›  专栏  ›  技术社区  ›  Haoest

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

  •  3
  • Haoest  · 技术社区  · 15 年前

    假设我有一个表示树状结构数据的项表,并且我希望继续向上跟踪,直到到达顶部节点,标记为父id为null。我的ms-sql 热膨胀系数 (公共表表达式)看起来像?

    例如,如果我想从 弯曲机 ,看起来就像

    喜剧片

    未来

    弯曲机

    谢谢,以下是示例数据:

    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 回复  |  直到 12 年前
        1
  •  4
  •   dan    15 年前

    应该是这样的:

    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