mysql cte 表不存在_使用CTE解决复杂查询的问题_MySQL
最近,同事需要从数个表中查询用户的业务和报告数据,写了一个SQL语句,查询比较慢:
Select
S.Name,
S.AccountantCode,
(
Select COUNT(*) from (
Select Distinct BusinessBackupId from Biz_BusinessBackupCustomer where Id in (
Select BusinessBackupCustomerId from Rpt_RegistForm where ( SignatureCPA1Id=S.Id or SignatureCPA2Id=S.Id ) and DocStatus=30
) ) T
) as 'BNum',
(case when R.Id is null then 0 else 1 end ) as 'Num',
R.ReportBackupDate
from
Base_Staff S
left join Rpt_RegistForm R on ( R.SignatureCPA1Id=S.Id or R.SignatureCPA2Id=S.Id ) and R.DocStatus=30
where S.UserType=3
该查询需要执行10秒左右,仔细分析,它有2次查询类似的结果集(Base_Staff,Rpt_RegistForm 关联部分),这正是CTE应用的场合。
从SQLSERVER 联机丛书,我们来了解下CET的概念:
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHS/s10de_6tsql/html/27cfb819-3e8d-4274-8bbe-cbbe4d9c2e23.htm
指定临时命名的结果集,这些结果集称为公用表表达式 (CTE)。该表达式源自简单查询,并且在单条 SELECT、INSERT、UPDATE、MERGE 或 DELETE 语句的执行范围内定义。该子句也可用在 CREATE VIEW 语句中,作为该语句的 SELECT 定义语句的一部分。公用表表达式可以包括对自身的引用。这种表达式称为递归公用表表达式。
下面看看经过CET改写过的查询:
With CTE as
(
select
--s.Id as S_ID,
s.Name ,s.AccountantCode,
r.BusinessBackupCustomerId --, r.Id as R_ID ,r.SignatureCPA1Id,r.SignatureCPA2Id
from Base_Staff S
left join Rpt_RegistForm R
on ( R.SignatureCPA1Id=S.Id or R.SignatureCPA2Id=S.Id ) and r.DocStatus=30
where s.UserType=3
)
select t0.*
,(
Select COUNT(*) from (
Select Distinct BusinessBackupId
from Biz_BusinessBackupCustomer b
inner join CTE on b.Id =CTE.BusinessBackupCustomerId
where t0.AccountantCode=CTE.AccountantCode
) t1
) as '约定书数'
from
(
select Name, AccountantCode,COUNT( BusinessBackupCustomerId) as '报告数'
from CTE
group by Name,AccountantCode
) t0
执行此查询,只需要5秒钟时间,比原来的查询提高了一倍。
注意上面的Count函数,它统计了一个列,如果该列在某行的值为NULL,将不会统计该行,这正符合需求。
另外,CTE还可以做递归处理,详细见上面的联机丛书URL的内容说明。
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:php中文网
TAG标签:问题
mysql cte 表不存在_使用CTE解决复杂查询的问题_MySQL相关推荐
- mysql数据表交叉引用_数据定义语句
数据定义语句 MySQL 8.0支持原子数据定义语言(DDL)语句.此功能称为原子DDL.原子DDL语句将数据字典更新,存储引擎操作和与DDL操作相关联的二进制日志写入操作组合到单个原子事务中.即使事 ...
- mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表
摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...
- mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式
摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...
- mysql 收藏表如何建立_代码收藏系列--mysql创建数据库、数据表、函数、存储过程命令...
创建mysql数据库 CREATE DATABASE IF NOT EXISTS `database_name` DEFAULT CHARSET utf8 COLLATE utf8_general_c ...
- mysql数据表添加列_如何将列添加到MySQL表
mysql数据表添加列 The command add column is used to add an additional column to any given MySQL table. 命令a ...
- mysql创表的工种_[MySQL基础]七、连接查询
含义:又称为多表查询,当查询的字段来自多个表时,就会用到连接查询 笛卡尔乘积现象 表1 有m行,表2有n行,结果为m*n行 发生原因:没有有效的连接条件. 如何避免:添加有效的连接条件. 案例:在bo ...
- mysql 单表2000多万条数据,模糊查询如何秒回
mysql 单表数据2000多万,没有分区.没有表.没有分库,表存储的是企业信息,例如:企业名称.经营范围.注册地址等信息.现在需要通过关键词模糊匹配企业名称,搜索出匹配的数据.因为模糊匹配,所以直接 ...
- mysql创建表属性引_【学习之Mysql数据库】mysql数据库创建表的属性详解
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MySQL中create table语句的基本语法是: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name ...
- java mysql修改表结构字段_【开发技术】java+mysql 更改表字段的步骤
1).首先通过SQL更改MYSQL库中的表结构(下面是一些例子) ALTER TABLE `illegalactivate` ADD `macethaddress` varchar(250) NOT ...
最新文章
- 什么是Terraform?
- ECCV 2018 StructSiam:《Structured Siamese Network for Real-Time Visual Tracking》论文笔记
- 多语言持久性:带有MongoDB和Derby的EclipseLink
- SQLAlchemy 教程 —— ORM 方式使用示例
- CentOS 6系统启动流程细微解读,不可忽略引导扇区的1.5阶段。
- mysql for python 64_解决windows64位系统上安装mysql-python报错
- angular监听输入框值的变化_angular 实时监听input框value值的变化触发函数方法
- java 常用集合list与Set、Map区别及适用场景总结
- 简单的php文件_超简单的php文件上传程序
- 【干货】js 数组操作合集(前端自我修养)
- Windows下编译DCMTK
- 浏览器主页被hao123、360导航之类的流氓网址劫持解决方法
- 云计算机应用论文,关于云计算应用的研究(本科毕业论文)
- 一条Insert语句怎么优化和解构
- tensorflow-gpu深度学习安装的一系列问题——>解决方法汇总
- ubutun 滑动 触控板_Ubuntu下触控板手势调节软件xSwipe
- 绎维软件F-One获得B轮融资,华创资本领投,齐银基金跟投...
- 一种防山火在线监测装置
- 微信好友互删服务器还会有记录吗,微信好友互删后还能恢复吗?一招轻松搞定...
- 如何把一个大的视频压缩变小
热门文章
- WebPart的三种部署方法
- Apriori算法进行关联分析(1)
- 严重: StandardServer.await: create[8005]:
- 自动ping博客服务程序
- ext中fieldLabel文本太宽的问题,以及Panel居中显示
- RabbitMQ的消息确认ACK机制
- Django在根据models生成数据库表时报 missing 1 required positional argument on_delete(亲测)
- phpstorm+Xdebug断点调试PHP
- git push 代码报错 Pushing to Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
- Homestead 集成开发环境配置