从自引用表中选择整个行的层次结构

时间:2018-05-31 14:52:25

标签: sql-server

我有一个包含自引用外键的表。类似于员工表,其中每个员工都有报告管理员,并且是分层的。这是这样一张桌子的图像。在此表中,ParentId是指向Id列的外键。

enter image description here

所以,问题是我想在这个表上运行一个带有给定Id的选择查询,该查询应该返回所有与请求ID分层连接的父项。换句话说,例如,如果我要求Id 14,它应该返回我ID

[14 - 11 - q], 
[11 -  8 - m], 
[8  -  7 - j], 
[7  -  4 - h], 
[4  -  2 - e], 
[2  -  1 - c],
[1  -  1 - b].  

有人可以告诉我T-SQL中的查询应该是什么吗?感谢。

1 个答案:

答案 0 :(得分:0)

是的,你可以通过下面的递归CTE来做到这一点 See live demo

  ; with rcte as 
(
   select id, parentid, name 
   from yourtable
   where id=8
   union all
   select t.id,t.parentid,t.name
   from yourtable t join rcte r
    on t.id=r.parentid and t.id<>t.parentid
   )

select * from rcte option (maxrecursion 0);