首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:基于主键查询完整的层次结构

SQL:基于主键查询完整的层次结构
EN

Stack Overflow用户
提问于 2020-04-23 22:55:30
回答 1查看 39关注 0票数 0

我们有一个类似下面的表格

代码语言:javascript
复制
folderid    name    parent
==========================
1           one     null
2           two     1
3           three   2
4           four    3
5           five    4
6           six     5

有没有办法在给定folderid的情况下检索完整的记录列表。例如,如果传递1,它应该返回直到叶为6的完整层次结构。如果传递6,它应该返回直到根为1的完整层次结构。如果传递4,它应该返回从根到叶的完整层次结构,从1到6。

EN

回答 1

Stack Overflow用户

发布于 2020-04-23 22:58:19

您可以使用递归CTE:

代码语言:javascript
复制
with cte as (
      select folderid
      from t
      where folderid = 1
      union all
      select t.folderid
      from cte join
           t
           on cte.folderid = t.parent
     )
select *
from cte
option (maxrecursion 0);

如果需要更多列,可以将它们包含在递归CTE中,也可以在外部查询中联接它们。

Here是一个db<>fiddle。

编辑:

如果你想在树上来回走动,我推荐两个CTE:

代码语言:javascript
复制
with cte_c as (
      select folderid, 1 as lev
      from t
      where folderid = 4
      union all
      select t.folderid, lev + 1
      from cte_c join
           t
           on cte_c.folderid = t.parent
     ),
     cte_p as (
      select parent, 1 as lev
      from t
      where folderid = 4
      union all
      select t.parent as folderid, lev + 1
      from cte_p join
           t
           on cte_p.parent = t.folderid
      where t.parent is not null
     )
select folderid
from cte_c
union all
select parent
from cte_p
where parent is not null
option (maxrecursion 0);

Here是此版本的db<>fiddle。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61390242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档