SQL查询和优化(十)
来源:互联网 发布:c语言 final 编辑:程序博客网 时间:2024/06/07 12:51
标量子查询改为LEFT JOIN
当标量中有ROWNUM = 1时
SELECT s.sid, s.sname, (SELECT cid FROM b WHERE b.sid = s.sid AND b.status IN('1','3') AND b.sstpe = '6' AND rownum = 1 ) cid, (SELECT cid FROM b WHERE b.sid = s.sid AND b.status IN('1','3') AND b.sstpe = '8' AND rownum = 1 ) ringcid, (SELECT cid FROM b WHERE b.sid = s.sid AND b.status IN('1','3') AND b.sstpe = '1' AND rownum = 1 ) mvcid FROM s WHERE 1=1 AND EXISTS( SELECT 1 FROM b c WHERE c.sid = s.sid AND status IN('1','3') AND rownum = 1 ) AND NOT EXISTS (SELECT 1 FROM b c WHERE c.sstype = '8' AND c.price ='0' AND c.distributionarea !='99' AND c.distributionarea IS NOT NULL AND s.sid =c.sid);
不加排序的句子中直接用”rownum = 1”,本身就是对数据的要求不严格,只要有一条数据返回就行。所以标量子查询可以改成下面的语句
(SELECT MAX( cid ) FROM b WHERE b.sid = s.sid AND b.status IN('1','3') AND b.sstpe = '6' ) cid, (SELECT MAX( cid ) FROM b WHERE b.sid = s.sid AND b.status IN('1','3') AND b.sstpe = '8' ) ringcid, (SELECT MAX( cid ) FROM b WHERE b.sid = s.sid AND b.status IN('1','3') AND b.sstpe = '1' ) mvcid,
增加聚合函数MAX,去掉条件rownum = 1,这样更改还能保证同样的数据返回同样的结果。下一步就是用一个查询返回上面三列及关联列的信息
把同样的条件放在WHERE后面,不同的条件放在CASE WHEN中SELECT c.sid, MAX(CASE WHEN c.sstype = '1' THEN cid END) AS mvcid, MAX(CASE WHEN c.sstype = '8' THEN cid END) AS ringid, MAX(CASE WHEN c.sstype = '6' THEN cid END) AS cidFROM b c WHERE status IN ('1','3')CROUP BY c.sid
然后再左联上面的结果就可以了
SELECT s.sid,s.sname,c.cid,c.ringcid,c.mvcid FROM s INNER JOIN(SELECT c.sid, MAX(CASE WHEN c.sstype = '1' THEN cid END) AS mvcid, MAX(CASE WHEN c.sstype = '8' THEN cid END) AS ringid, MAX(CASE WHEN c.sstype = '6' THEN cid END) AS cid FROM b c WHERE status IN ('1','3') CROUP BY c.sid) c ON (c.sid = s.sid) WHERE 1=1 AND NOT EXISTS (SELECT 1 FROM b c WHERE c.sstype = '8' AND c.price ='0' AND c.distributionarea !='99' AND c.distributionarea IS NOT NULL AND s.sid =c.sid);
选自《Oracle 查询优化改写技巧与案例》 有教无类 落落 著
阅读全文
0 0
- SQL查询和优化(十)
- 【SQL之查询优化(一)】高手详解SQL性能优化十条经验
- SQL查询和优化(一)
- SQL查询和优化(二)
- SQL查询和优化(三)
- SQL查询和优化(四)
- SQL查询和优化(五)
- SQL查询和优化(六)
- SQL 查询和优化(七)
- SQL查询和优化(九)
- SQL查询和优化(十一)
- SQL查询和优化(十二)
- SQL查询和优化(十三)
- SQL查询和优化(十五)
- SQL优化和查询(十六)
- SQL查询和优化(八)
- SQL优化和查询(十七)
- SQL查询和优化(十四)——用分析函数优化标量子查询
- hdu 6105 Gameia【图+博弈详解】
- ubuntu16.04下安装sublime(参考官方教程)
- 仿支付宝快递信息控件
- java-集合应用与训练
- Linux下so动态库查看与运行时搜索路径的设置
- SQL查询和优化(十)
- Python类的使用总结
- 去掉当前页的导航栏 改变当前页状态栏的颜色
- JavaScript_09
- 8.11 G
- 集群间session共享
- PCL1.8 & OPENNI2.0 & OPENCV3.0安装小结
- 浏览器的记录栈和history API的应用
- 【列表解析式】Python的单行操作秀