对SQL CTE的一点个人理解
2024-10-21 17:44:05
/*
执行顺序:
首先,执行按一、二,此时二输出的结果,可以理解为临时n
然后,按三、二、三、二循环执行
注意:
,步骤三的where为递归终止条件,由于用的是substr函数。在最后一次递归的时候,如果不加限制,给的substr的起始位置会大于字符串长度导致报错
,步骤三的from为CTE临时表,在开始递归的时候,需要动态获取循环截断的三个条件。
,关键字 union all 下面为每次递归的语句,递归数据集必为CTE的临时表n
*/
1 WITH n --下面括号内的为递归用的参数
2 ( str --需要分割的字符串
3 , ori --截断的位置,随每次递归增加
4 , pos --下一次substr截取到的位置,
5 )
6 AS
7 (
8 ---------执行步骤一 ------------------------
9 select dept_lid as str
10 ,1
11 ,locate(',',dept_lid)
12 from pacs.PACSIE_USER_TBL a where user_id='11077'
13 union all
14 ---------执行步骤三 ------------------------
15 select str
16 ,pos + 1
17 ,locate(',',str,pos+1)
18 from n
19 WHERE locate (',', str, pos + 1) > 0
20 )
21 ---------执行步骤二 ------------------------
22 SELECT substr (str, ori, pos - ori) AS RESULT
23 FROM n
-----------------------实质就是将步骤一的结果,循环带入步骤三执行。步骤二只做每次递归后的输出用途。
--执行逻辑如下
引用:https://www.cnblogs.com/heyu/articles/11324767.html
1 SELECT c.CategoryId,c.Name,c.Parent,tt.level+1 level FROM Category c JOIN
2 (
3 SELECT c.CategoryId,c.Name,c.Parent,tt.level+1 level FROM Category c JOIN
4 (
5 SELECT c.CategoryId,c.Name,c.Parent,tt.level+1 level FROM Category c JOIN
6 (
7 SELECT CategoryId,Name,Parent,0 level FROM dbo.Category WHERE CategoryId=46
8
9 )tt ON tt.Parent=c.CategoryId
10 )tt ON tt.Parent=c.CategoryId
11 )tt ON tt.Parent=c.CategoryId
其他的
递归后的结果,需要再生成一个临时表与其他表进行关联使用。
1 WITH n (...)
2 AS
3 (--递归
4 )
5 ,m as (
6 SELECT substr (str, ori, pos - ori) AS RESULT
7 FROM n
8 )
9 select *
10 from m a
11 join b on a.result=b.dept_lid
最新文章
- List接口
- Handler消息传递机制
- 在IIS8添加WCF服务支持
- 压力测试工具——Galting
- win7 C# winForm编程 savefiledialog 不能弹出保存窗体
- geeksforgeeks@ Find sum of different corresponding bits for all pairs (Bit manipulation)
- SUSE linux ,liveUSB制作方法
- VBS基础篇 - 动态数组
- codeforces 687B - Remainders Game 数学相关(互质中国剩余定理)
- Spring与Hibernate整合之通用Dao的实现
- 什么是RAW数据源
- mysq Point类型 查询和插入操作:insert和select
- scrollview嵌套gridview滑动问题
- brew的MAC安装
- TCP/UDP 常用端口列表
- html页面边框的另一种写法
- ecshop 添加后台页面以及设置权限
- 把文本数据转化为json
- 谈谈 在 .Net 生态里为什么没有 Hadoop 系列 ?
- 阅读<;Vivado Design Suite Tutorial---Logic Simulation>;笔记