如何获取自我引用表的ID?

时间:2017-11-18 22:31:39

标签: sql tsql

我的表设置类似于:

MyTable
Id        INT
Name      VARCHAR
ParentId  INT

现在让我们说这个表中的数据如下:

1  AAA  NULL
2  BBB  1
3  CCC  2
4  DDD  1
5  EEE  4
6  FFF  NULL

如何编写一个带有id(int)的函数,并将所有可能子元素的ID表返回给该父元素?

例如,我会调用SomeFunction(1)并期望得到:

1
2
3
4
5

是否能够编写一个可以工作的函数,但只有当孩子不是同一个父母时,我才能够支持这种情况。

2 个答案:

答案 0 :(得分:0)

这可以使用递归cte。

完成
"\n"

Try the Demo

答案 1 :(得分:0)

递归CTE是要走的路。特定id的所有子项的更简单版本是:

with children as (
      select id 
      from mytable
      where id = 1
      union all
      select m.id 
      from mytable m join
           children c
           on m.parentid = c.id
     )
select *
from children