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<>提琴。

本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/890.html

(0)
上一篇 2022年6月29日 下午4:01
下一篇 2022年6月29日 下午4:01

相关推荐

发表评论

登录后才能评论