Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2951484
  • 博文数量: 199
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 4126
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-06 19:06
个人简介

半个PostgreSQL DBA,热衷于数据库相关的技术。我的ppt分享https://pan.baidu.com/s/1eRQsdAa https://github.com/chenhuajun https://chenhuajun.github.io

文章分类

全部博文(199)

文章存档

2020年(5)

2019年(1)

2018年(12)

2017年(23)

2016年(43)

2015年(51)

2014年(27)

2013年(21)

2011年(1)

2010年(4)

2009年(5)

2008年(6)

分类: Mysql/postgreSQL

2016-03-28 15:41:16

CTE是SQL标准定义的语法,很多主流的数据库都支持,但不包括MySQL。 

CTE的作用应该主要有两个,下面用PostgreSQL的例子进行演示。
1. 简化查询的写法,相同的语义用子查询会由于嵌套太深而不易理解。                                                                                        
例:删除数据表中的重复记录

点击(此处)折叠或打开      

  1. with tbx(ctid,rank) as (
  2.     select ctid, rank() over (partition by tb.* order by ctid) rank from tb
  3. )
  4. delete from tb where ctid in(select ctid from tbx where rank > 1);

2. 通过递归玩出一些有用又好玩的花样
例:计算1到100的和                    

点击(此处)折叠或打开

  1. WITH RECURSIVE t(n) AS (
  2.     VALUES (1)
  3.   UNION ALL
  4.     SELECT n+1 FROM t WHERE n < 100
  5. )
  6. SELECT sum(n) FROM t;


阅读(2214) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~