菜单表t_Sys_Navigation
ID 主键ID
ParentID 父级ID
NavigationName 菜单名称
查询父节点(含父节点下所有子节点的集合)
WITH tree AS --创建一个虚拟表
(
SELECT Nav.ID ,
Nav.ParentID ,
Nav.NavigationName FROM dbo.t_Sys_Navigation Nav WHERE Nav.ID = n(限制条件)
UNION ALL
SELECT NavAll.ID ,
NavAll.ParentID ,
NavAll.NavigationName FROM dbo.t_Sys_Navigation NavAll
INNER JOIN tree BTree ON BTree.ID = NavAll.ParentID
)
SELECT * FROM tree(可添加查询条件或排序)
逻辑梳理:第一次执行
SELECT Nav.ID ,
Nav.ParentID ,
Nav.NavigationName FROM dbo.t_Sys_Navigation Nav WHERE Nav.ID = n(限制条件)
查询出父节点
SELECT NavAll.ID ,
NavAll.ParentID ,
NavAll.NavigationName FROM dbo.t_Sys_Navigation NavAll
INNER JOIN tree BTree ON BTree.ID = NavAll.ParentID
tree为空,内联结果为空
第二次执行时
查询父节点的子节点( 查询所有数据中ParentID等于第一次执行的结果(父节点)的ID)
以此类推,形成递归查询