基于SQLSERVER:展现祖孙关系(树形tree结构)


场景描述:

一个系统的菜单有一、二、三、四等若干层级,你需要筛选某个主菜单下的所有子菜单。
一种方案:可以使用一个自连接查询一层,两个自连接查询两层结构,三个自连接查询三层...
但这样是繁琐的,你真正需要的是能够遍历整个层次的通用写法。


解决方案:
使用WITH递归


示例:
有这样一张菜单表
F_moduleid 菜单ID F_parentid 上级菜单ID F_fullname 菜单名称
0000 0 顶层菜单
2 0000 某一级菜单
查询某个主菜单下的3级以内的子菜单,该主菜单id为0000。
with x(F_moduleid,F_parentid,F_fullname,depth)
as(
select F_moduleid,F_parentid,F_fullname,0 depth from module
where F_moduleid="0000"
union all
select F_moduleid,F_parentid,F_fullname,x.depth
from module a,x
where a.F_parentid=x.F_moduleid
)
select * from x where depth <=3

可以类推
查询所有子菜单:select * from x
查询所有二级子菜单:select * from x where depth=2

上一篇:LCA模板


下一篇:树链剖分求LCA(洛谷P3379)