在很多编程语言中都有 for循环这样的东西。在数据库里面 替代他是 游标

但是游标使用起来是相当耗费资源的,今天看见一个CTE尝试了下他的用法

create table employewhere
(
 id int identity(1,1),
 [name] varchar(10),
 [value] varchar(10),
 [ttime] int
)

insert employewhere
select '张三',2,1
union all
select '张三',2,2
union all
select '张三',2,3
union all
select '张三',2,4
union all
select '李四',2,1
union all
select '李四',2,2
union all
select '李四',2,3
union all
select '李四',2,4
union all
select '李四',2,1

insert employewhere
select '王五',2,1
union all
select '王五',2,3
union all
select '王五',2,4

我想得到ttime为连续数字的name

张三

李四

select * from  employewhere

1 张三 2 1
2 张三 2 2
3 张三 2 3
4 张三 2 4
5 李四 2 1
6 李四 2 2
7 李四 2 3
8 李四 2 4
9 王五 2 1
10 王五 2 3
11 王五 2 4
12 王五 2 1
13 王五 2 3
14 王五 2 4
15 王五 2 1
16 王五 2 3
17 王五 2 4

-----------------------------

with myCTE as
(
 select id,[name],value,ttime ,1 as number   from employewhere where value=2
 union all
 select tt.id,tt.name,tt.value,tt.ttime ,number+1 from employewhere as tt
 inner join myCTE on myCTE.[name]=tt.[name] and tt.ttime=myCTE.ttime+1--连接起来的条件
 where tt.value=2
)
select * from myCTE where number>3

8 李四 2 4 4
4 张三 2 4 4

但是为什么要这么写呢

我们可以这么执行查询里面的数据

with myCTE as
(
 select id,[name],value,ttime ,1 as number   from employewhere where value=2
 union all
 select tt.id,tt.name,tt.value,tt.ttime ,number+1 from employewhere as tt
 inner join myCTE on myCTE.[name]=tt.[name] and tt.ttime=myCTE.ttime+1--连接起来的条件
 where tt.value=2
)
select * from myCTE

可以得到数据

1 张三 2 1 1
2 张三 2 2 1
3 张三 2 3 1
4 张三 2 4 1
5 李四 2 1 1
6 李四 2 2 1
7 李四 2 3 1
8 李四 2 4 1
9 王五 2 1 1
10 王五 2 3 1
11 王五 2 4 1
12 王五 2 1 1
13 王五 2 3 1
14 王五 2 4 1
15 王五 2 1 1
16 王五 2 3 1
17 王五 2 4 1
11 王五 2 4 2
14 王五 2 4 2
17 王五 2 4 2
11 王五 2 4 2
14 王五 2 4 2
17 王五 2 4 2
11 王五 2 4 2
14 王五 2 4 2
17 王五 2 4 2
8 李四 2 4 2
7 李四 2 3 2
8 李四 2 4 3
6 李四 2 2 2
7 李四 2 3 3
8 李四 2 4 4
4 张三 2 4 2
3 张三 2 3 2
4 张三 2 4 3
2 张三 2 2 2
3 张三 2 3 3
4 张三 2 4 4

是不是发现很多重复数据 同时可以更直观的让我们认识 其实 CTE本身就是一个临时表这样的一个东西 只是不要你进行创建

最后面一排 使我们写的 number

然后我们在进行筛选

where number>3

就是排序中连续有三个的

于是就把 我们

张三和李四查询出来了

SQL数据库CTE的用法相关推荐

  1. mysql raiserror_RAISERROR在SQL Server数据库中的用法

    raiserror  是由单词 raise error 组成 raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...

  2. 查询前几条记录SQL在不同数据库中的用法

    13,(1)查询前几条记录SQL在不同数据库中的用法; 1. ORACLE SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. INFORMIX SELECT FIR ...

  3. oracle判断是否为空为空赋值,sql数据库中ISNULL函数用法 sql语句判断值是否为空...

    在使用sql数据库的过程,由于服务器设置不当导致sql server的某个字段为空,导致部分内容显示失败,就需要将为空的字符替换为制定的字符. 例子,sql语句: use 数据库 update new ...

  4. SQL数据库语句中escape的用法及含义

    SQL数据库语句中escape的用法及含义 escape是用来转译的 例如: 数据库中有个表 A字段abc 中存du了字符'%',那么我查询的时候如果只想查询第二位是 '%'的记录就需要进行模糊查询, ...

  5. mysql sql between,数据库between的用法

    数据库between的用法的用法你知道吗?下面小编就跟你们详细介绍下数据库between的用法的用法,希望对你们有用. 数据库between的用法的用法如下: MySQL BETWEEN 语法 BET ...

  6. SQL数据库操作完全手册

    SQL数据库完全手册 日期:2001-3-24 0:47:00 出处:电脑报 作者:未知 SQL是Structured Quevy Language(结构化查询语言)的缩写.SQL是专为数据库而建立的 ...

  7. ASP中怎么实现SQL数据库备份、恢复!

    选择自 hanghwp 的 Blog 1.ASP中怎么实现SQL数据库备份.恢复! 答:asp在线备份sql server数据库: 1.备份 <% SQL="backup databa ...

  8. SQL中Truncate的用法

    转自:https://www.cnblogs.com/zhoufangcheng04050227/p/7991759.html 本文导读:删除表中的数据的方法有delete,truncate, 其中T ...

  9. mysql数据库replace写入_MySQL数据库replace into 用法(insert into 的增强版)

    MySQL数据库replace into 用法我以前介绍过相关的教程,但有加强版各位朋友可能不知道吧,今天我们来看一篇关于MySQL数据库replace into增强版的介绍与用法例子. Error ...

最新文章

  1. python检测英文拼写错误
  2. 中国python之父是谁-Python之父:我们能为中国的“996”程序员做什么?
  3. 面向接口编程详解(一)—— 思想基础
  4. Cookie,Session
  5. python文件选择:tkFileDialog 基础
  6. c++ string后面会添加‘\0‘
  7. Theme Section HDU - 4763(些许暴力)
  8. 1017. A除以B (20)-PAT乙级真题
  9. 过滤器模式(Filter Pattern)
  10. QueryRunner类
  11. zabbix企业应用之low level discovery监控memcache
  12. 利用matlab来进行路径规划,matlab路径规划系列
  13. 红外测温之MLX90614教程
  14. Ubuntu 的千千静听
  15. Go语言攻略:“面向对象”
  16. 自己写的vue图片上传插件(假装是插件)
  17. 解决 Signed Claims JWSs are not supported. 异常
  18. KISSY基础篇乄KISSY之IO(1)
  19. 蚂蚁金服是如何实现App端侧的极致体验的?
  20. bat开启远程计算机程序,[PsTools]psexec.exe使用范例-运行远程电脑程序(exe、bat等)...

热门文章

  1. 显示本机IP及电脑名称等信息的bat脚本
  2. 如何利用UWA优化物理开销
  3. 计算机网盘怎么进,教你百度网盘如何进行图文识别?
  4. anaconda遇到“An unexpected error has occurred”问题
  5. 让你闷声发大财的秘密,学会了一定能成为有钱人!
  6. 什么是腾讯蓝鲸运维体系?附部署指南
  7. docker个人理解与极简安装
  8. Python 爬虫(抓取网页内容简单实现)
  9. 有声读物服务器Audiobookshelf
  10. 【Pygame实战】这两款脑洞大开的文字剧情版游戏,99% 的人打了五星好评-《巨龙之洞》-《太空矿工》