SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式

百度百科

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

with ()

as(

)

select * from

生成数据--菜单目录结构表

create table tb_menu(

id int not null, --主键id

title varchar(50), --标题

parent int --parent id

);

--父菜单

insert into tb_menu(id, title, parent) values(1, '父菜单1',null);

insert into tb_menu(id, title, parent) values(2, '父菜单2',null);

insert into tb_menu(id, title, parent) values(3, '父菜单3',null);

insert into tb_menu(id, title, parent) values(4, '父菜单4',null);

insert into tb_menu(id, title, parent) values(5, '父菜单5',null);

--一级菜单

insert into tb_menu(id, title, parent) values(6, '一级菜单6',1);

insert into tb_menu(id, title, parent) values(7, '一级菜单7',1);

insert into tb_menu(id, title, parent) values(8, '一级菜单8',1);

insert into tb_menu(id, title, parent) values(9, '一级菜单9',2);

insert into tb_menu(id, title, parent) values(10, '一级菜单10',2);

insert into tb_menu(id, title, parent) values(11, '一级菜单11',2);

insert into tb_menu(id, title, parent) values(12, '一级菜单12',3);

insert into tb_menu(id, title, parent) values(13, '一级菜单13',3);

insert into tb_menu(id, title, parent) values(14, '一级菜单14',3);

insert into tb_menu(id, title, parent) values(15, '一级菜单15',4);

insert into tb_menu(id, title, parent) values(16, '一级菜单16',4);

insert into tb_menu(id, title, parent) values(17, '一级菜单17',4);

insert into tb_menu(id, title, parent) values(18, '一级菜单18',5);

insert into tb_menu(id, title, parent) values(19, '一级菜单19',5);

insert into tb_menu(id, title, parent) values(20, '一级菜单20',5);

--二级菜单

insert into tb_menu(id, title, parent) values(21, '二级菜单21',6);

insert into tb_menu(id, title, parent) values(22, '二级菜单22',6);

insert into tb_menu(id, title, parent) values(23, '二级菜单23',7);

insert into tb_menu(id, title, parent) values(24, '二级菜单24',7);

insert into tb_menu(id, title, parent) values(25, '二级菜单25',8);

insert into tb_menu(id, title, parent) values(26, '二级菜单26',9);

insert into tb_menu(id, title, parent) values(27, '二级菜单27',10);

insert into tb_menu(id, title, parent) values(28, '二级菜单28',11);

insert into tb_menu(id, title, parent) values(29, '二级菜单29',12);

insert into tb_menu(id, title, parent) values(30, '二级菜单30',13);

insert into tb_menu(id, title, parent) values(31, '二级菜单31',14);

insert into tb_menu(id, title, parent) values(32, '二级菜单32',15);

insert into tb_menu(id, title, parent) values(33, '二级菜单33',16);

insert into tb_menu(id, title, parent) values(34, '二级菜单34',17);

insert into tb_menu(id, title, parent) values(35, '二级菜单35',18);

insert into tb_menu(id, title, parent) values(36, '二级菜单36',19);

insert into tb_menu(id, title, parent) values(37, '二级菜单37',20);

--三级菜单

insert into tb_menu(id, title, parent) values(38, '三级菜单38',21);

insert into tb_menu(id, title, parent) values(39, '三级菜单39',22);

insert into tb_menu(id, title, parent) values(40, '三级菜单40',23);

insert into tb_menu(id, title, parent) values(41, '三级菜单41',24);

insert into tb_menu(id, title, parent) values(42, '三级菜单42',25);

insert into tb_menu(id, title, parent) values(43, '三级菜单43',26);

insert into tb_menu(id, title, parent) values(44, '三级菜单44',27);

insert into tb_menu(id, title, parent) values(45, '三级菜单45',28);

insert into tb_menu(id, title, parent) values(46, '三级菜单46',28);

insert into tb_menu(id, title, parent) values(47, '三级菜单47',29);

insert into tb_menu(id, title, parent) values(48, '三级菜单48',30);

insert into tb_menu(id, title, parent) values(49, '三级菜单49',31);

insert into tb_menu(id, title, parent) values(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;

参考文章

java递归查询无限极分类_sqlserver实现树形结构递归查询(无限极分类)相关推荐

  1. java递归查询无限极分类_sqlserver实现树形结构递归查询(无限极分类)的方法

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE ...

  2. Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。

    Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用. 创建示例表: CREATE TABLE TBL_TEST (   ID    NUMBER,   NAME ...

  3. Java设计模式中组合模式是什么/树形结构怎么组合或显示存储,编程怎么实现树形结构

    继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用! 5.7 组合模式 5.7.1 概述 又名整体模式,是用于把一组相似的对象当作一个单一的对象 依据树形结构 ...

  4. Java学习笔记<十六>(树形结构存储)

    1.树形结构的介绍 * 树形结构简介  * 树形结构是一种非线性结构,存储的是"一对多的"关系的数据元素的集合  *  * 树形结构的相关术语:  * 节点(Node):使用树结构 ...

  5. 树形结构递归查询,删除等封装处理

    一. 背景 项目中往往会用到大量的树形结构查询以及删除,通过几个树形结构的操作之后,发现这部分的代码是可以抽象,部分接口是可以做到通过,做好这些,使得类似的操作可以得到简化,下面将讲解具体的操作过程. ...

  6. java arraylist 遍历树_Java递归遍历树形结构

    废话不多说了,直接给大家贴代码,具体代码如下所示://菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { ...

  7. java 构建树形结构_Java求助:如何建立一个树形结构

    在Java中如何实现一个如下的树形结构:root/|\year_2009year_2008year_2007,etc/|||month_1month_2month_1month_1|\|/\|day1 ...

  8. 根据根节点和子节点构造树形结构

    package com.cyc.basic.test.list;import com.alibaba.fastjson.JSON; import lombok.Data;import java.uti ...

  9. 组合模式 -- 树形结构处理

    树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得 ...

最新文章

  1. mac下的apache项目发布出现403
  2. mycat快速体验(转)
  3. cllocationmanager 获取不了 的原因_我的世界:天启之境如何获取“人鱼手链”?一段人鱼姬的爱情故事...
  4. TypeScript 的变量定义
  5. 最长递增子序列 子串_最长递增奇偶子序列
  6. python打开快捷方式_Python打开一个JAR快捷方式
  7. ViewPager——基础知识和PagerAdapter必须重写的四个方法
  8. 在zephyr上使用mipi-sys-t
  9. 操作系统学习笔记(一)
  10. 【浏览器】解决QQ浏览器背景页面变成全黑(类似底片反色)
  11. 嵌入式操作系统新纪元?
  12. 一二线城市知名 IT 互联网公司名单,程序员选择多了
  13. 【8015】对做产品有帮助的行外书
  14. QListView超简单的更新列表
  15. 计算机word题目设置标题,word文档标题怎么设置?word设置标题样式的方法
  16. 微博Mysql数据库规范
  17. 广讯通显示连接服务器失败怎么办,苹果手机连接服务器失败原因
  18. 文献:利用自驱动分子马达并行计算子集和问题 Parallel computation with molecular-motor-propelled agents...(PNAS)
  19. 数学符号及读法大全(超经典)
  20. 光纤通信系统组成总结及相干光通信基础

热门文章

  1. 【系统分析师之路】系统分析师必知必会(数据库上篇)
  2. NCv5.0 与 IBM公司WAS中间件
  3. matlab批量处理文件夹中的csv文件(读取、处理、输出)
  4. php 新浪通行证、新浪微博模拟统一登录 (后台网页抓取版) 2016
  5. html div 居中心,div在屏幕中水平居中 div内容居中
  6. 授权某用户的 OSS 目录操做权限
  7. 常用的Xshell指令
  8. React Native解决在ios13暗黑模式下状态栏都为白色的问题
  9. wps 模拟分析 规划求解_WPS表格怎么进行规划求解运算?
  10. 提高网络服务器性能,优化网络的七条思路 帮您更快提高网络速度