SQL优化和查询(十六)
来源:互联网 发布:时光在飞逝生命知多少 编辑:程序博客网 时间:2024/05/17 20:00
用MERGE改写有聚合操作的UPDATEUPDATE g SET coll = (SELECT to_char(wmsys.wm_concat(c.col2 || '_' || nvl (c.col3,c.col4))) FROM g a JOIN b ON a.col17 = b.col18 JOIN k c ON b.id = c.col5 WHERE a.col9 = '10A' AND g.col6 = a.col6) WHERE g.col9 = '10A' AND EXISTS (SELECT NULL FROM g a JOIN b ON a.col17 = b.col18 JOIN k c ON b.id = c.col5 WHERE a.col9 = '10A' AND g.col6 = a.col6) )
现在的语句里面有一个wmsys.wm_concat,这是一个聚合函数,作用是把同一组的字符串合并在一起。
现在把关联列应在GROUP BY 后面:
SELECT a.col6, wmsys.wm_concat(c.col2 || '_' || nvl (c.col3,c.col4)) AS col1 FROM g a JOIN b ON a.col17 = b.col18 JOIN k c ON b.id = c.col5 WHERE a.col9 = '10A' GROUP BY g.col6 = a.col6
再把上面的语句放入USING子句就可以了
MERGE INTO gUSING(SELECT a.col6, wmsys.wm_concat(c.col2 || '_' || nvl (c.col3,c.col4)) AS col1 FROM g a JOIN b ON a.col17 = b.col18 JOIN k c ON b.id = c.col5 WHERE a.col9 = '10A' GROUP BY g.col6 = a.col6) xON (x.col6 = g.col6)WHEN MATCHED THEN UPDATE SET g.col1 = x.col1 WHERE g.col9 = '10A'
选自《Oracle 查询优化改写技巧与案例》 有教无类 落落 著
阅读全文
0 0
- SQL优化和查询(十六)
- SQL查询和优化(一)
- SQL查询和优化(二)
- SQL查询和优化(三)
- SQL查询和优化(四)
- SQL查询和优化(五)
- SQL查询和优化(六)
- SQL 查询和优化(七)
- SQL查询和优化(九)
- SQL查询和优化(十)
- SQL查询和优化(十一)
- SQL查询和优化(十二)
- SQL查询和优化(十三)
- SQL查询和优化(十五)
- SQL查询和优化(八)
- SQL优化和查询(十七)
- mysql 学习记录(十六)--优化常用sql
- SQL查询和优化(十四)——用分析函数优化标量子查询
- 设计模式之责任链模式
- 马特赛特旋转演算法(Mersenne Twister)
- Ubuntu环境下eclipse搭建C++开发环境(CDT)
- <mvc:annotation-driven>配置
- 欢迎使用CSDN-markdown编辑器
- SQL优化和查询(十六)
- 一个web框架的诞生——写程序最重要的是开心
- 非常报数
- Maven 简单构建私服
- 抽象数据类型线性表的定义
- 2015-2016 Northwestern European Regional Contest (NWERC 2015) 7/11 待补
- jquery基本知识要点
- Redis集群安装
- 【安卓学习笔记】JAVA基础Lesson1-简介与变量