将需要两次查询的不相干的查询通过一条查询语句返回结果
来源:互联网 发布:金融大数据分析招聘 编辑:程序博客网 时间:2024/06/07 00:37
将需要两次查询的不相干的查询通过一条查询语句返回结果,这往往在统计查询中非常有用,因为统计需要显示很多统计数据,涉及到的表比较多,所以如果能一条语句返回所有结果,对于WEB分页的处理也很方便.下面介绍几种方法:
1.使用全外连接(full outer join). 处理方法是,先分别按照需要得到查询结果A,B等,然后使用
select * from A full outer join B on A.XX=B.XX ,这样就可以将不相干查询通过条SQL语句返回给上层处理.
在oracle9i中使用full outer join存在bug,经常导致查询结果混乱,例如
select * from(
select a.nsrsbh 企业税号 ,count(*) 咨询人数,sum(decode(b.hasmyddc,'Y',myd,0)) 咨询满意度总数,sum(decode(b.hasmyddc,'Y',1,0)) 咨询满意度统计人数,sum(decode(b.hasmyddc,'Y',myd,0))/decode(sum(decode(b.hasmyddc,'Y',1,0)),0,1,sum(decode(b.hasmyddc,'Y',1,0))) 咨询平均满意度 from fwgl_zxjlb a,fwgl_thjlb b where a.fzjg_dm=b.fzjg_dm(+) group by a.nsrsbh
) tt
FULL OUTER JOIN
(
select c.nsrsbh 企业税号,count(*) 上门人次,sum(nvl(c.YHXCMYD,0)) 上门满意度总数,sum(decode
(c.YHXCMYD,null,0,1)) 上门满意度统计人数,sum(nvl(c.YHXCMYD,0))/decode(sum(decode
(c.YHXCMYD,null,0,1)),0,1,sum(decode(c.YHXCMYD,null,0,1))) 上门平均满意度 from FWGL_PFD
c,FWGL_PFDRWFP d where c.pfdid=d.pfdid(+) and c.fzjg_dm=d.fzjg_dm(+) group by c.nsrsbh
) ttt
on tt.企业税号=ttt.企业税号
当然, 看不懂这个SQL语句也没关系,你只需要注意这个语句的几个特点就可以了,第一,明白我做连接的目的,是希望本来应该做两次查询返回的结果,通过全外连接一次返回; 第二,两个红色部分表示分别经过子查询得到的两张临时表(暂时可以这么理解) ,同时这两个查询得到的结果并没有必然联系;第三,在这两张临时表上做全外连接FULL OUTER JOIN, 连接的条件是税号相同;
现在按道理来讲,如果两张临时表在税号上做了全外连接之后,记录条数应该比两张临时表条数总和要少,但是结果出人意料的是,结果居然多除了100多条. 如果将两张临时表的连接顺序换一下,得到的记录条数又比正确结果条数少.
2.使用左外连接和右外连接以及联合.处理方法是,先分别按照需要得到查询结果A,B等,然后使用
select * from A left outer join B on A.XX=B.XX
union all
select * from A right outer join B on A.XX=B.XX
,这样也可以将不相干查询通过条SQL语句返回给上层处理.
3.直接使用联合,不过这次的处理,则需要分别对A,B中的结果字段进行处理,例如,A结果包含了 姓名 性别,B结果包含了企业名,企业地址.那么在得到结果之前对SQL做一下处理, 使返回的字段个数和名称相同, 对A: select 姓名 ,性别, "" as 企业名, "" as 企业地址, from XXXX ; 对B: select "" as 姓名, "" as 性别 , 企业名 , 企业地址 from XXXX ;然后对A,B进行联合 A union B 得到最后结果.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lovingprince/archive/2007/03/17/1531944.aspx
- 将需要两次查询的不相干的查询通过一条查询语句返回结果
- 将需要两次查询的不相干的查询通过一条查询语句返回结果
- 将一条SQL语句的结果依次当作另一条SQL语句的查询条件去查询
- 一条替换查询的结果的sql语句
- 一条模糊查询的语句
- 一条分页查询的语句
- JAVA 数据库查询返回两次结果集
- android中本地建立数据库,服务器访问本地数据库,将查询结果返回客户端(重要的一条线)
- sql语句将查询的结果拼接成字符串
- 包含子查询的一条insert语句
- EF中一条简单的查询语句
- 在HQL select查询语句中自定义查询结果返回的数据类型
- 用一条SQL语句查询一张表得到不同条件的多个结果
- oracle中用一条select 语句把符合多个条件的查询结果列出来
- Ogre射线查询返回的结果说明
- Ogre射线查询返回的结果说明
- TP 查询时候标题带有&的字符,查询没有结果!打出SQL语句去数据库查,返回有结果!
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
- SOCKET粘包问题
- AutoResetEvent+与+ManualResetEvent区别
- 初篇
- win7 、xp 记住密码
- win7语言
- 将需要两次查询的不相干的查询通过一条查询语句返回结果
- H.264 RTP payload 格式 - czanyou - C++博客
- C C++全局变量初始化 initializer element is not constant 错误 c++中为什么不能对全局变量在函数外赋值
- EditText
- 调试: Rose逆向工程时死机.
- 解决双击打开文件速度很慢,右键菜单也很慢的问题
- c++中 string与string.h 的作用、区别和C++头文件的现状
- sqlplus连接远程oracle
- 利用Jquery 定义Div的最小高度