SQL中with recursive用法案例详解
SQL
提供了递归查询,可将当前查询结果作为下一次的查询集合进行再次查询,最后得到我们想要的结果。
关键字with recursive
准备
假设我们有一张机构表org
,如下:
列名 | 描述 |
---|---|
id
|
机构ID
|
pid
|
上级机构ID
|
name
|
机构名称
|
查询当前机构和它的所有下级,以列表形式显示
with recursive cte as
(select pc1.* from org pc1 where pc1.id in ('000000')union allselect pc2.* from org pc2 inner join cte c on c.id=pc2.pid
)select ct.* from cte ct;
从上到下,以链路形式追加
如获取某个机构ID和它所有的下级,且以链路的形式显示
机构ID: a>b>c>d
机构名称:机构1>机构2>机构3>机构4
with recursive cte as
(select pc1.id,cast(pc1.id as varchar(500)) as id_seq,cast(pc1.name as varchar(500)) as name_seq, from org pc1 where pc1.id in ('000000')union allselect pc2.id,cast(c.id_seq || '>' || pc2.id as varchar(500)) as id_seq,cast(c.name_seq || '>' || pc2.name as varchar(500)) as name_seq, from org pc2 inner join cte c on c.id=pc2.pid
)select ct.* from cte ct;
从下到上 获取链路
如获取某个机构ID和它的所有上级,且以链路的形式显示
with recursive cte as
(select pc1.id,pc1.pid,cast(pc1.id as varchar(500)) as id_seq,cast(pc1.name as varchar(500)) as name_seq, from org pc1 where pc1.id in ('66666')union allselect pc2.id,pc2.pid,cast(pc2.id || '>' || c.id_seq as varchar(500)) as id_seq,cast(pc2.name || '>' || c.name_seq as varchar(500)) as name_seq, from org pc2 inner join cte c on c.pid=pc2.id
)select ct.* from cte ct;
彩蛋
利用with recursive
实现斐波那契数列
方法1
with recursive fibonacci as
(select 1 as n, 0 as fib_n,1 as next_fib_nunion allselect n+1, next_fib_n, fib_n+next_fib_n from fibonacci where n < 40
)select * from fibonacci;
方法2
with recursive fibonacci(n,fib_n,next_fib_n) as
(select 1, 0 ,1union allselect n+1, next_fib_n, fib_n+next_fib_n from fibonacci where n < 40
)select * from fibonacci;
SQL中with recursive用法案例详解相关推荐
- python编程字典100例_python中字典(Dictionary)用法实例详解
本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...
- html中使用volist要引入什么,thinkphp中volist标签使用案例详解
这次给大家带来thinkphp中volist标签使用案例详解,thinkphp中volist标签使用的注意事项有哪些,下面就是实战案例,一起来看一下. 属性: name(必须):要输出的数据模板变量 ...
- java list详解_Java 中 list 用法案例详解
LIST是个容器接口可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数,用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据类型 ...
- python类初始化导入库_Python中optparser库用法实例详解
本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常 ...
- [转载] python中for语句用法_详解Python中for循环的使用_python
参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...
- python中for语句用法_详解Python中for循环的使用_python
这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...
- python print函数用法_Python3.2中Print函数用法实例详解
本文实例讲述了Python3.2中Print函数用法.分享给大家供大家参考.具体分析如下: 1. 输出字符串 >>> strHello = 'Hello World' >> ...
- JavaScript中window.open用法实例详解
本文较为详细的分析了JavaScript中window.open用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <script LANGUAGE="javascript& ...
- php定义枚举,PHP中Enum(枚举)用法实例详解
本文实例讲述了PHP中Enum(枚举)用法.分享给大家供大家参考,具体如下: PHP其实有Enum类库的,需要安装perl扩展,所以不是php的标准扩展,因此代码的实现需要运行的php环境支持. (1 ...
最新文章
- verilog基础篇RAM IP核的使用
- 返回1到n的所有组合python_如何在Python中生成0-1矩阵的所有可能组合?
- erp沙盘采购总监的心得_erp沙盘模拟采购总监心得
- wxWidgets:wxUpdateUIEvent类用法
- 西门子博图的FB块_西门子S7-300/400PLC OB-FB-FC-DB块介绍
- hdu 2275 Kiki Little Kiki 1 水题
- 处理2D图像和纹理——创建2D菜单界面
- laravel连接mysql连接数过多_php – Laravel 4和MySQL的连接太多了
- QTreeWidget样式qss
- 腾讯云即时通信IM知识详解
- 云计算、分布式计算、并行计算、网格计算、集群
- ASP.NET在线考试系统+文档说明
- 这款安全好用的手机浏览器,真是一股清流,值得点赞
- 七彩虹将星 X15 AT 2023 参数配置 七彩虹将星 X15 AT 评测
- Linux网络连接命令
- Android Wear与Apple Watch交互设计对比
- 广域网(WAN)简介
- 达梦数据文件误删了恢复
- Bullet physics 引擎的官方文档翻译
- Rust - Rocket框架 -基础入门