/*
执行顺序:

首先,执行按一、二,此时二输出的结果,可以理解为临时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

对SQL CTE的一点个人理解的更多相关文章

  1. net core体系-web应用程序-4net core2.0大白话带你入门-8asp.net core 内置DI容器(DependencyInjection,控制翻转)的一点小理解

    asp.net core 内置DI容器的一点小理解   DI容器本质上是一个工厂,负责提供向它请求的类型的实例. .net core内置了一个轻量级的DI容器,方便开发人员面向接口编程和依赖倒置(IO ...

  2. AngularJS』一点小小的理解

    『AngularJS』一点小小的理解   AngularJS 是一个前端的以Javascript为主的MVC框架.与AngularJS相类似的还有EmberJS. 随着时代在进步,各种各样的开发理念与 ...

  3. sql主键的一点重要理解

    sql只会读取数据,不会自动设置主键,所以绑定数据后要设置主键(前台) 不管是int或者uniqueidentifier只要类型对得上就可以用,int自增其实没什么太大优势(但是通常都会用自增来做,从 ...

  4. Sql — CTE公用表表达式和With用法总结

    CTE(Common Table Expression) 公用表表达式,它是在单个语句的执行范围内定义的临时结果集,只在查询期间有效.它可以自引用,也可在同一查询中多次引用,实现了代码段的重复利用. ...

  5. SQL Server执行计划的理解【转】

      要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看 ...

  6. SQL SERVER中架构的理解

    在sqlserver 2005中,可能大家在工作或学习的时候会经常发现这样一些问题,你使用一个账户在数据库中创建了一张表,却发现你自己创建的表却没有修改和查询的权限,这是一件很郁闷的事情,在sqlse ...

  7. Layui的一点小理解(上)

    首先声明这是个人的一点理解,如有不对之处请指正,以下的例子有在官网上看到的,有的是自己写的.还是老规矩最后会附上官网的,如有不明白之处,请查看文档或留言. 既然说Layui,当然要简单的介绍以下什么是 ...

  8. SQL Server“复杂”概念之理解

    用惯了Oracle的人,接触SQL Server中的概念时,会觉得比较难理解,甚至感觉有点“绕”,这是因为Oracle中将某些其他数据库中存在的概念给简化了,这里就拿两个最常见的概念来举例说明:1.s ...

  9. 一条sql语句搞定基于mysql的sql执行顺序的基本理解

    对数据库基本操作是每个程序员基本功,如何理解并快速记住sql执行的顺序呢,其实一条复杂的sql就能搞定: SELECT DISTINCT <select_list> FROM <le ...

  10. SQL Server 执行计划的理解

    要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的. ...

随机推荐

  1. VSCode一键接入Notebook体验算法套件快速完成水表读数

    摘要:本示例围绕真实AI需求场景,介绍VSCode一键接入Notebook体验算法套件快速完成水表读数的使用流程. 本文分享自华为云社区<VSCode一键接入Notebook体验算法套件快速完成 ...

  2. 重学SpringBoot. step7 高并发 秒杀

    高并发 高并发最容易出现的问题就是数据安全能不能得到保障. 你需要保证速度,又需要保证数据安全,那么速度也必然会有所下降. 所以最简单的办法就是提升硬件.或者把Mysql换成MongoDB,加个Red ...

  3. JAVA虚拟机24---线程安全

    1 什么叫线程安全 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果 ...

  4. CNCF社区首个!KubeEdge达到软件供应链SLSA L3等级

    摘要:在v1.13.0版本中,KubeEdge项目已达到 SLSAL3等级(包括二进制和容器镜像构件),成为CNCF社区首个达到SLSA L3等级的项目. 本文分享自华为云社区<CNCF社区首个 ...

  5. Spring Boot 小知识、小demo、配置文件

    五.spring boot 通过springboot可以快速的搭建一个基于ssm框架的Java application,简单配置,自动装配. JavaConfiguration用java类来替代xml ...

  6. CF1367E Necklace Assembly

    题目传送门 思路 提供一种比现有的两篇题解都简单的方法. 我们枚举答案,发现最终的答案数组一定是由多个完全相同的块组成的,并且块长必定是 \(k\) 的因数. 然后我们考虑枚举答案 \(i\),那么此 ...

  7. [COCI2015-2016#2] VUDU

    题目传送门 思路 这是一种简单的树状数组解法. 我们设偏移值表示 \(a_i\) 与目标平均数 \(p\) 的差值,显然,一个区间若能满足条件,需要满足此区间的偏移值之和 \(\ge 0\). 看到区 ...

  8. Hexo系列(二):Hexo安装

    作者:独笔孤行 官网:​​ ​http://anyamaze.com​​ 公众号:云实战 1.安装nodejs和npm yum install epel-release -y yum install ...

  9. MySQL插入数据的多种方式

    插入数据的多种方式 replace关键字插入数据 语法: REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [PARTITION (partition_ ...

  10. div 元素内容超出可通过鼠标滚轮实现横向滚动

    移动端中的元素内容超出时,对容器设置overflow-x: auto就可以通过手势水平移动.但是 PC 端只能通过鼠标滚轮上下滑动,而不能水平移动. 只需要给元素添加一个监听鼠标滚轮事件,上下滑动时修 ...