1.递归原理(摘自网上)

递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发。在逻辑上可以将CTE名称的内部应用理解为前一个查询的结果集。

递归查询没有显式的递归终止条件,只有当第二个递归查询返回空结果集或是超出了递归次数的最大限制时才停止递归。是指递归次数上限的方法是使用MAXRECURION。

Sql递归的优点:效率高,大量数据集下,速度比程序的查询快。

2.数据模拟

select '01' as Code,'北京市' Name,'0' parentCode,1 level union all
select '02' as Code,'河南省' Name,'0' parentCode,1 level union all
select '0101' ,'海淀区','01',2 union all
select '010101' ,'上地','0101',3 union all
select '010102' ,'清河','0101',3 union all
select '0102' ,'西城区','01',2 union all
select '0103' ,'东城区','01',2 union all
select '0201' ,'安阳市','02',2 union all
select '020101' ,'林州','0201',3 union all
select '020102' ,'滑县','0201',3 union all
select '0202' ,'落阳市','02',2 

3.递归查询北京对应下级数据

with T as
(--模拟测试数据
select '01' as Code,'北京市' Name,'0' parentCode,1 level union all
select '02' as Code,'河南省' Name,'0' parentCode,1 level union all
select '0101' ,'海淀区','01',2 union all
select '010101' ,'上地','0101',3 union all
select '010102' ,'清河','0101',3 union all
select '0102' ,'西城区','01',2 union all
select '0103' ,'东城区','01',2 union all
select '0201' ,'安阳市','02',2 union all
select '020101' ,'林州','0201',3 union all
select '020102' ,'滑县','0201',3 union all
select '0202' ,'落阳市','02',2
)
,A as(--递归方法
select Code,Name,parentCode,level from T where Code='01'
union all
select T.Code,T.Name,T.parentCode,t.level from T
inner join A on T.parentCode=A.Code
)
--递归查询北京数据
select * from A ;

Sql递归(用with 实现递归查询)相关推荐

  1. mysql 单标递归_MySql8 WITH RECURSIVE递归查询父子集的方法

    背景 开发过程中遇到类似评论的功能是,需要时用查询所有评论的子集.不同数据库中实现方式也不同,本文使用Mysql数据库,版本为8.0 Oracle数据库中可使用START [Param] CONNEC ...

  2. sql 没有调试 菜单_MySQL递归查询上下级菜单

    正文 在传统的后台管理系统里面经常会需要展示多级菜单关系,今天我们来学一下如何使用一条SQL语句展示多级菜单. 现在我们有一张corpinfo单位表,里面有一个belong字段指向上级单位,首先来看一 ...

  3. 数据库:sql 递归

    mysql 自关联表,以下为向下递归以及向上递归样例. ######1 递归查询前期准备,如果你的表已经存在,可忽略此步. 建表 CREATE TABLE `wq_areainfo` (`id` in ...

  4. SQL——递归CTE

    简介 递归公用表达式(CTE)是一个CTE,它有一个子查询,它引用CTE名称本身. 语法: WITH RECURSIVE cte_name AS (initial_query -- anchor me ...

  5. mysql8.0递归_mysql8.0版本递归查询

    1.先在mysql数据库添加数据 DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept`  ( `id` int(11) NOT NULL, `pid` in ...

  6. mysql 游标中实现递归_mysql中实现递归查询?

    今天遇到一个问题,要求在一张客户表和一张卡更新表之间实现关联替换. 需求是这样:有一些客户有一天换几张卡的情况,每次换卡卡号都会换新,旧卡号不会再用.如果一个客户一天换四次卡,会出现五张卡号关联一个客 ...

  7. java树状结构递归与非递归实现,外加sql递归实现

    关于下列面出现的泛型自行修改 1.java8流式非递归实现 public Map<String, List<E>> selectCatalogue(int type, int ...

  8. 关于oracle 递归生成,关于Oracle递归查询

    有这样一个表:DEPT ID ID PARENT_ID 父部门ID,顶级部门的父部门为null DEPT_NAME 部门名称 如果要从顶级部门开始递归所有部门: select level,a.* fr ...

  9. mysql递归死循环查询_MySQL 递归查询实践总结

    MySQL复杂查询使用实例 By:授客QQ:1033553122 表结构设计 SELECT id, `name`, parent_id FROM `tb_testcase_suite` 说明: par ...

最新文章

  1. (28)SpringBoot启动时的Banner设置【从零开始学Spring Boot】
  2. 我,AI专家,模型检测COVID-19准确率高达97.5%,约吗
  3. C语言用位运算构建特定的二进制数
  4. typora-setup-x64.exe下载
  5. css复合选择器 1205
  6. 传智播客 C/C++学习笔记 指针3 理解指针必须与内存四区相结合
  7. VC2012 小助手的破解
  8. 用HTML和CSS制作简单的静态网页
  9. 中国联通:网络重构转型的战略规划及痛点
  10. 软考信息安全工程师知识总结
  11. excel输出线性拟合曲线的斜率
  12. redis源码学习-03_动态字符串SDS
  13. 黑马程序员——C语言基础--数组和字符串
  14. 7-1 立方体类的实现 (20分)
  15. python富翁与穷人_富人家的孩子怎样看待穷人家的孩子?
  16. 一步一步教你制作销售业绩分析报告
  17. 《SpringBoot框架学习二之HTTP协议》
  18. android原生rom去哪找,ROM在哪里找 ROM查找方法【详解】
  19. NuGet安装Spire.OCR
  20. 软件测试的日常工作是什么

热门文章

  1. Python的三种代码续行书写方法
  2. Python手册(Machine Learning)--statsmodels(Regression)
  3. Express-get和post
  4. 520,期待了不起的对象
  5. 如图GX Works2所示我该如何操作?
  6. python增删改查mysql_python之mysql的增删改查
  7. zabbix官网下载地址:https://sourceforge.net/projects/zabbix/files/ZABBIX Latest Stable/
  8. DRF 3.x Throttling 节流使用示例和配置方法
  9. 一个简单的OPPO商城页面
  10. 谈一谈linux下线程池