with 语法

用来实现递归查询,比如当要查询部门时,查询当前部门及下属部门就要采用递归的查询

Id Pid DeptName
1 0 总部
2 1 研发部
3 1 测试部
4 1 质量部
5 2 小组1
6 2 小组2
7 3 测试1
8 3 测试2
9 5 前端组
10 5 美工

要实现的效果:

Id Pid DeptName lvl
2 1 研发部 0
5 2 小组1 1
6 2 小组2 1
9 5 前端组 2
10 5 美工 2

查询sql:

with cte as
(select Id,Pid,DeptName,0 as lvl from Departmentwhere Id = 2union allselect d.Id,d.Pid,d.DeptName,lvl+1 from cte c inner join   Department don c.Id = d.Pid
)
select * from cte

执行过程:
递归CTE最少包含两个查询(也被称为成员)。第一个查询为定点成员,定点成员只是一个返回有效表的查询,用于递归的基础或定位点。第二个查询被称为递归成员,使该查询称为递归成员的是对CTE名称的递归引用是触发

首先定点成员 :

select Id,Pid,DeptName,0 as lvl from Department where Id = 2

查询出来的结果集为ID=2的一条数据
接下来此条数据作为第二个查询的基础 也就是cte

select d.Id,d.Pid,d.DeptName,lvl+1 from cte c inner join   Department d on c.Id = d.Pid

此时查出的结果集为 id为2的这一条数据和Department表作连接

Id Pid DeptName lvl
2 1 研发部 0
5 2 小组1 1
6 2 小组2 1

同理 将得到的记录(上面的id=5和id=6的2条数据作为 cte,id为2的是条件,不是本次的结果)再作为基础,再与Department表作连接 得到

Id Pid DeptName lvl
2 1 研发部 0
5 2 小组1 1
6 2 小组2 1
9 5 前端组 2
10 5 美工 2

依此类推 最后一次讲上面id=9和id=10的记录作为cte ,再与Department表作连接 , 此次的结果为空 ,递归结束。

sqlserver with 语法相关推荐

  1. oracle切换sqlserver,ORACLE语法转换成sqlserver,该如何解决

    ORACLE语法转换成sqlserver 小弟在 ORACLE写了一个小函数,但是在sqlserver里执行不了,小弟不怎么懂得sqlserver的语法,大家帮忙看看,给指正指正 CREATE OR  ...

  2. SQLServer基础语法大全(基础篇)

    SQLServer基础语法 一.插入语句 1. 普通插入 2. 表数据查询(复制)插入 二.查询语句 1. 所有数据查询 2. 根据某条件查询前多少条数据 三.更新语句 1. 单表数据更新 2. 多表 ...

  3. sqlserver数据语法

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  4. mysql查找前几条数据类型_MySQL与SQLServer的语法区别

    1.自增值的设置 mysql:id int primary key auto_increment sqlserver:id int primary key identity(1, 1) //ident ...

  5. SQLSERVER 存储过程 语法

    SQLSERVER存儲過程的寫法格式規格 ***************************************************** ***  author:Susan ***  da ...

  6. SQLSERVER存储过程语法详解

    SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ][ { @parameter data_type }[ VARYI ...

  7. mysql sqlserver 事务_[MSSQL]SQLServer事务语法_MySQL

    事务全部是关于原子性的.原子性的概念是指可以把一些事情当做一个单元来看待.从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合. 为了理解事务的概念,需要能够定义非常明确的边界. ...

  8. sqlserver查询语法

    基本查询 select * from 表名 查询指定列 select 列1名称,列n名称 from 表名 查询指定列名称 完整查询 select 表名.列1名称,表名.列n名称 from 表名 查询 ...

  9. sqlserver常用语法大全

    查看锁表 SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id)tableName FROM sys.dm_ ...

  10. mysql与sqlserver之间的关系转换

    sqlserver中的数据类型与mysql之间的对应 --sqlserver select * into xx from xx where 1=0 只复制表结构 select * into xx fr ...

最新文章

  1. 真赞!IDEA中这么玩MyBatis,让编码速度飞起!
  2. LeetCode: 105. Construct Binary Tree from Preorder and Inorder Traversal
  3. 六周第三次课 9.6/9.7 awk
  4. ORACLE将表中的数据恢复到某一个时间点
  5. 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密
  6. 基于php的工厂管理系统,PHP设计模式——工厂模式
  7. 美国远程MBA全面占领MBA市场
  8. create-react-app 创建react应用环境变量(env)配置
  9. 按键精灵定位坐标循环_[按键精灵教程]带你了解多点找色、多点比色
  10. fltk和glog在mac下的安装与编译
  11. 接管理器是Android上最,10 款优秀的 Android 文件管理器
  12. windows下icns转png或ico
  13. mysql 经纬度 索引_转:mysql根据经纬度查找排序
  14. 外贸B2C系列:google企业邮箱设置
  15. 醉林疯的PTA 7-2 换硬币 (20分)
  16. NPOI 操作Excel学习总结
  17. 苹果10.13.6,开机的时候经常会显示 禁止符号
  18. 对矩阵乘法本质的理解——从向量线性组合角度
  19. 光电器件(发光器件)特征与发光特性介绍
  20. mac如何查看是否安装了git?

热门文章

  1. ROS加载PCD文件
  2. 常见的浏览器兼容问题和解决方法
  3. torch学习 (二十九):周杰伦歌词数据集测试循环神经网络
  4. c# chart 各个属性_c# Chart设置样式
  5. 学会它,能让你工作学习效率提升10倍!
  6. 基于JavaWeb的C2C网上购物平台系统设计
  7. html音乐播放心得体会,听音乐讲座心得体会范文3篇
  8. spark大数据的学习
  9. win7 64位纯净版系统下载
  10. 个人整理的免费的Bootstrap模板