sqlserver with 语法
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 语法相关推荐
- oracle切换sqlserver,ORACLE语法转换成sqlserver,该如何解决
ORACLE语法转换成sqlserver 小弟在 ORACLE写了一个小函数,但是在sqlserver里执行不了,小弟不怎么懂得sqlserver的语法,大家帮忙看看,给指正指正 CREATE OR ...
- SQLServer基础语法大全(基础篇)
SQLServer基础语法 一.插入语句 1. 普通插入 2. 表数据查询(复制)插入 二.查询语句 1. 所有数据查询 2. 根据某条件查询前多少条数据 三.更新语句 1. 单表数据更新 2. 多表 ...
- sqlserver数据语法
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- mysql查找前几条数据类型_MySQL与SQLServer的语法区别
1.自增值的设置 mysql:id int primary key auto_increment sqlserver:id int primary key identity(1, 1) //ident ...
- SQLSERVER 存储过程 语法
SQLSERVER存儲過程的寫法格式規格 ***************************************************** *** author:Susan *** da ...
- SQLSERVER存储过程语法详解
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ][ { @parameter data_type }[ VARYI ...
- mysql sqlserver 事务_[MSSQL]SQLServer事务语法_MySQL
事务全部是关于原子性的.原子性的概念是指可以把一些事情当做一个单元来看待.从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合. 为了理解事务的概念,需要能够定义非常明确的边界. ...
- sqlserver查询语法
基本查询 select * from 表名 查询指定列 select 列1名称,列n名称 from 表名 查询指定列名称 完整查询 select 表名.列1名称,表名.列n名称 from 表名 查询 ...
- sqlserver常用语法大全
查看锁表 SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id)tableName FROM sys.dm_ ...
- mysql与sqlserver之间的关系转换
sqlserver中的数据类型与mysql之间的对应 --sqlserver select * into xx from xx where 1=0 只复制表结构 select * into xx fr ...
最新文章
- 真赞!IDEA中这么玩MyBatis,让编码速度飞起!
- LeetCode: 105. Construct Binary Tree from Preorder and Inorder Traversal
- 六周第三次课 9.6/9.7 awk
- ORACLE将表中的数据恢复到某一个时间点
- 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密
- 基于php的工厂管理系统,PHP设计模式——工厂模式
- 美国远程MBA全面占领MBA市场
- create-react-app 创建react应用环境变量(env)配置
- 按键精灵定位坐标循环_[按键精灵教程]带你了解多点找色、多点比色
- fltk和glog在mac下的安装与编译
- 接管理器是Android上最,10 款优秀的 Android 文件管理器
- windows下icns转png或ico
- mysql 经纬度 索引_转:mysql根据经纬度查找排序
- 外贸B2C系列:google企业邮箱设置
- 醉林疯的PTA 7-2 换硬币 (20分)
- NPOI 操作Excel学习总结
- 苹果10.13.6,开机的时候经常会显示 禁止符号
- 对矩阵乘法本质的理解——从向量线性组合角度
- 光电器件(发光器件)特征与发光特性介绍
- mac如何查看是否安装了git?