找到最顶层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)。
有类似的问题询问如何找到 child 的顶级 parent(
样本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)。