/*
执行顺序:

首先,执行按一、二,此时二输出的结果,可以理解为临时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. Node.js 应用全链路追踪技术——全链路信息存储

    作者:vivo 互联网前端团队- Yang Kun 本文是上篇文章<Node.js 应用全链路追踪技术--全链路信息获取>的后续.阅读完,再来看本文,效果会更佳哦. 本文主要介绍在Node ...

  2. git 拉取github项目失败(超时)

    问题 通过git拉取GitHub上的项目失败报错信息如下 fetch-pack: unexpected disconnect while reading sideband packet fatal: ...

  3. saas解决redis数据库分离的一种方案

    package com.xf.config; import java.util.HashMap; import java.util.Map; import java.util.Set; import ...

  4. vue 事件中央总线

    vue 事件中央总线 作用: 实现任意组件间的通信 实现的方法: 有以下两种方式 方式1: 全局事件总线 1.在main.js文件中定义 new Vue({ el: '#app', router, s ...

  5. 聊聊火热的 ChatGPT(我帮大伙问了几个比较关心的问题)

    如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/L9tZy_KWnE1kf0E3HNhJhQ 本文大概 2562 个字,阅读需花 15 分钟 内 ...

  6. 华为eNSP 基础企业级WLAN配置

    目标:STA可以扫描并连接到两个ssid,STA可以ping通ip:200.200.200.200 步骤:1 实现AP与AC之间的连通性.     2 在AC上配置与WLAN相关的各项参数 3 把AP ...

  7. JAVA 进阶完结

    1.接口 这个类中 有了新的关键字 abstract 并且里面的方法没有括号 这样的类 上图就是 抽象函数与抽象类 那么继承抽象类的子类需要做什么工作呢 2.代码编写的思路 3.接口 接口跟抽像类的很 ...

  8. 【KAWAKO】MNN-将推理程序交叉编译成RK1126的可执行文件

    目录 得到RK交叉编译器 将交叉编译器添加进path 对MNN进行交叉编译 对自己的工程进行交叉编译 将编译好的可执行文件和.so动态库放入板子中运行 得到RK交叉编译器 主要用到这两个,一个gcc的 ...

  9. 从零实现在线云相亲APP|程序员脱单神器(内附源码Demo)

    实时音视频通话涉及到的技术栈.人力成本.硬件成本非常大,一般个人开发者基本无法独立完成一个功能健全并且稳定的实时音视频应用.本文介绍一天之内,无任何实时音视频低层技术的android开发者完成实时相亲 ...

  10. 解决.Net Core3.0 修改cshtml代码之后必须重新生成才可以看到效果

    1.安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包 2.在Startup中ConfigureServices方法里面加入services.Ad ...