温馨提示×

sqlserver中怎么实现树形结构递归查询

发布时间:2021-08-06 11:03:08 阅读:110 作者:Leah 栏目:数据库

本篇文章为大家展示了sqlserver中怎么实现树形结构递归查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它。每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存。可以使用CTE来执行递归操作。创建的语法是:

with <name of you cte>(<column names>)as(<actual query>)select * from <name of your cte>

1、生成数据

--菜单目录结构表 create table tb_menu(  id int not null, --主键id title varchar(50), --标题  parent int --parent id ); --父菜单 insert into tb_menu(id, title, parentvalues(1'父菜单1',null)insert into tb_menu(id, title, parentvalues(2'父菜单2',null)insert into tb_menu(id, title, parentvalues(3'父菜单3',null)insert into tb_menu(id, title, parentvalues(4'父菜单4',null)insert into tb_menu(id, title, parentvalues(5'父菜单5',null); --一级菜单 insert into tb_menu(id, title, parentvalues(6'一级菜单6',1)insert into tb_menu(id, title, parentvalues(7'一级菜单7',1)insert into tb_menu(id, title, parentvalues(8'一级菜单8',1)insert into tb_menu(id, title, parentvalues(9'一级菜单9',2)insert into tb_menu(id, title, parentvalues(10'一级菜单10',2)insert into tb_menu(id, title, parentvalues(11'一级菜单11',2)insert into tb_menu(id, title, parentvalues(12'一级菜单12',3)insert into tb_menu(id, title, parentvalues(13'一级菜单13',3)insert into tb_menu(id, title, parentvalues(14'一级菜单14',3)insert into tb_menu(id, title, parentvalues(15'一级菜单15',4)insert into tb_menu(id, title, parentvalues(16'一级菜单16',4)insert into tb_menu(id, title, parentvalues(17'一级菜单17',4)insert into tb_menu(id, title, parentvalues(18'一级菜单18',5)insert into tb_menu(id, title, parentvalues(19'一级菜单19',5)insert into tb_menu(id, title, parentvalues(20'一级菜单20',5); --二级菜单 insert into tb_menu(id, title, parentvalues(21'二级菜单21',6)insert into tb_menu(id, title, parentvalues(22'二级菜单22',6)insert into tb_menu(id, title, parentvalues(23'二级菜单23',7)insert into tb_menu(id, title, parentvalues(24'二级菜单24',7)insert into tb_menu(id, title, parentvalues(25'二级菜单25',8)insert into tb_menu(id, title, parentvalues(26'二级菜单26',9)insert into tb_menu(id, title, parentvalues(27'二级菜单27',10)insert into tb_menu(id, title, parentvalues(28'二级菜单28',11)insert into tb_menu(id, title, parentvalues(29'二级菜单29',12)insert into tb_menu(id, title, parentvalues(30'二级菜单30',13)insert into tb_menu(id, title, parentvalues(31'二级菜单31',14)insert into tb_menu(id, title, parentvalues(32'二级菜单32',15)insert into tb_menu(id, title, parentvalues(33'二级菜单33',16)insert into tb_menu(id, title, parentvalues(34'二级菜单34',17)insert into tb_menu(id, title, parentvalues(35'二级菜单35',18)insert into tb_menu(id, title, parentvalues(36'二级菜单36',19)insert into tb_menu(id, title, parentvalues(37'二级菜单37',20);  --三级菜单 insert into tb_menu(id, title, parentvalues(38'三级菜单38',21)insert into tb_menu(id, title, parentvalues(39'三级菜单39',22)insert into tb_menu(id, title, parentvalues(40'三级菜单40',23)insert into tb_menu(id, title, parentvalues(41'三级菜单41',24)insert into tb_menu(id, title, parentvalues(42'三级菜单42',25)insert into tb_menu(id, title, parentvalues(43'三级菜单43',26)insert into tb_menu(id, title, parentvalues(44'三级菜单44',27)insert into tb_menu(id, title, parentvalues(45'三级菜单45',28)insert into tb_menu(id, title, parentvalues(46'三级菜单46',28)insert into tb_menu(id, title, parentvalues(47'三级菜单47',29)insert into tb_menu(id, title, parentvalues(48'三级菜单48',30)insert into tb_menu(id, title, parentvalues(49'三级菜单49',31)insert into tb_menu(id, title, parentvalues(50'三级菜单50',31); commit;

2.查找所有上级节点

--查询树状结构某节点(44)的上级所有根节点  with cte_parent(id,title,parent)  as  (    --起始条件    select id,title,parent    from tb_menu    where id = 44  --列出子节点查询条件    union all    --递归条件    select a.id,a.title,a.parent    from tb_menu a    inner join     cte_parent b     --执行递归,这里就要理解下了     on a.id=b.parent   )              select * from cte_parent;

3.查找下级节点带level

--查询树状结构某节点下的所有子节点(  with cte_child(id,title,parent,level)  as  (    --起始条件    select id,title,parent,0 as level    from tb_menu    where id = 6--列出父节点查询条件    union all    --递归条件    select a.id,a.title,a.parent,b.level+1    from tb_menu a    inner join     cte_child b    on ( a.parent=b.id)   )  select * from cte_child;

上述内容就是sqlserver中怎么实现树形结构递归查询,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

温馨提示×

网络异常,请检查网络