找到最顶层parent的children

Find children of a most top level parent

有类似的问题询问如何找到 child 的顶级 parent(, this and this). I have a similar question but I want to find all childern of a top level parent. 是类似的问题,但使用了 wordpress 预定义函数。

样本table:

id    parent
1     0
2     0
3     1
4     2
5     3
6     3
7     4

我想 select 最上面的 ID parent 等于 1。输出应该是 3 和 3 的所有 children 我的意思是 (5,6) 甚至更多深度 children 如果可用。

我知道我可以 select 他们使用 两次内部连接 ​​ 但是层次结构可能会更复杂,层数更多。

因为你没有爬完整个阶梯...

select *
from YourTable
where parent = (select top 1 parent from YourTable group by parent order by count(parent) desc)

如果您想要 return 3 的父级,因为 3 最常被列出,那么您将使用递归 CTE。

一个简单的 "Recursive CTE" 就可以满足您的需求:

with n as (
  select id from my_table where id = 1 -- starting row(s)
  union all
  select t.id
    from n
    join my_table t on t.parent_id = n.id
)
select id from n;

此 CTE 将下降所有级别 ad infinitum。好吧...默认情况下 SQL 服务器将其限制为 128 个级别(您可以增加到 65k)。