SQL。根据主键查询完整的层次结构。

我们有一个像下面这样的表格

folderid    name    parent
==========================
1           one     null
2           two     1
3           three   2
4           four    3
5           five    4
6           six     5

有沒有辦法在給定資料夾id的情況下,擷取完整的記錄清單,例如,如果傳入1,應該返回完整的層次結構,直到葉子是6。例如,如果传递 1,应该返回完整的层次结构,直到叶子是 6,如果传递 6,应该返回完整的层次结构,直到根部是 1,如果传递 4,应该返回从根部到叶子的完整层次结构,从 1 到 6。

解决方案:

你可以使用递归CTE。

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中,或者你可以在外部查询中加入它们。

下面是 是db<>提琴。

EDIT。

如果你想在树上走来走去,我会推荐两个CTE。

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);

这里… 是这个版本的db<>提琴。

给TA打赏
共{{data.count}}人
人已打赏
未分类

用cplex输出一个二元变量数组。

2022-9-8 3:18:35

未分类

关于 "失败打开流:HTTP请求失败! HTTP1.0 403 Forbidden"

2022-9-8 3:18:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索