sql - 如何在 SQL Server 中的层次表上连接父子行?
问题描述
我有一个表地址,我想连接诸如 parent-1 => parent-1/all-child、parent-2 => parent-2/all-child 等行......
地址表
ID Caption Parent
---------------------
1 A NULL
2 B NULL
3 a 1
4 b 2
5 bb 4
6 C NULL
7 aa 3
8 c 6
NULL Parent 是指 Root
期望的输出
ID Caption Parent
---------------------
1 A NULL
3 A/a 1
7 A/a/aa 3
2 B NULL
4 B/b 2
5 B/b/bb 4
6 C NULL
8 C/c 6
解决方案
您可以为此使用递归 cte。这个想法是从根节点开始,遍历层次结构到叶子,边走边连接路径。
with cte as (
select id, cast(caption as nvarchar(max)) caption, parent from mytable where parent is null
union all
select t.id, cast(c.caption + '/' + t.caption as nvarchar(max)), t.parent
from cte c
inner join mytable t on t.parent = c.id
)
select * from cte order by caption
编号 | 标题 | 父母 :- | :-------- | -----: 1 | 一个 | 空值 3 | 一个/一个 | 1 7 | 一个/一个/一个 | 3 2 | 乙| 空值 4 | 早/晚 | 2 5 | B/b/bb | 4 6 | C | 空值 8 | 抄送| 6
推荐阅读
- c - Visual Studio 2019 自定义快捷方式
- javascript - D3 在调整大小窗口上更改 SVG 尺寸
- java - 如何从 paintComponent() 向 GridBagLayout 添加元素
- xamarin - 如何在导航页面 2 中更改某些数据时刷新 HomePageViewModel 上的绑定
- javascript - 将对象数组与值数组匹配
- javascript - 为什么在此处访问 firstElementChild 时我得到 null ?
- javascript - iframe 在 Chrome 浏览器中不可见
- c# - 在 C# String 构造函数 String(Char*) 中,为什么构造函数不期望指向字符数组的指针?
- javascript - JS 新手:为什么这个函数在 for 循环中只调用一次?
- android - ReleasePrimitiveArrayElements 期间的 LogHeapCorruption