时间:2021-07-01 10:21:17 帮助过:5人阅读
id | pid | name |
001 | 顶级/一级节点 | |
001001 | 001 | 二级节点 |
001001001 | 001001 | 三级节点 |
通过子节点递归查询父节点:
with subqry(id, pid, name) as ( select cb.id, cb.pid, cb.name
from cb where cb.id = ‘001001001‘ union all select cb.id, cb.pid, cb.name
from cb, subqry where cb.id = subqry.pid ) select distinct * from subqry
这样,就能查询出id为001001001的子节点及其上所有父节点。
通过父节点递归查询子节点:
with subqry(id, pid, name) as ( select cb.id, cb.pid, cb.name from cb where cb.id = ‘001‘ union all select cb.id, cb.pid, cb.name from cb, subqry where cb.pid = subqry.id ) select distinct * from subqry
这样,就能查询出id为001的父节点及其下所有子节点。
另外的,在向下查询子节点的时候还有一个技巧可以查询出层级。因为递归的原因,每一次递归层级就加1,就可以加一个初始值为0的层级字段level,每次递归加1就可以查询出层级了。
"世界是真的,付出的都值得。"
sql server使用cte递归查询获取树形的父节点/子节点
标签:evel ESS 付出 union 有一个 临时 table server tab