WEB开发网
开发学院数据库Oracle 解决Oracle分页查询中排序与效率问题 阅读

解决Oracle分页查询中排序与效率问题

 2009-03-05 13:11:08 来源:WEB开发网   
核心提示: 最初我使用如下Sql代码查询:select*from(selectROWNUMrn,t.idID,o.nameYYB,u.nameXM,t.MCfromtZDYSXt,tuseru,lborganizationowheret.cjr=u.idandu.orgid=o.orgcodeandt

最初我使用如下Sql代码查询:   select * from (select ROWNUM rn, t.id ID, o.name YYB,u.name XM, t.MC    
from tZDYSX t,tuser u,lborganization o where t.cjr=u.id and u.orgid=o.orgcode and    
t.gx = 1 order by t.ID )Where rn>10 and rn<=20;  

这种方法能成功分页,结果如下:

RN    ID        YYB       XM      MC
---------- ----------------- -------------------
14   105 某证券总部     管理员 开发渠道为上海
11   106 某证券总部     管理员 万科A
12   107 某证券总部     管理员 11
13   108 某证券总部     管理员 今天过生日的客户
18   119 某证券总部     管理员 客户号包含1008
17   120 某证券总部     管理员 aaa
19   123 某证券总部     管理员 ssssssss
20   124 某证券总部     管理员 www
15   127 某证券总部     管理员 1212
16   128 某证券总部     管理员 aaaaaa

10 rows selected

从结果看来,有个问题:此语句Sql代码

order by CJSJ DESC  被执行,但是是在分后的第11到20条记录的结果集中再进行排序,而不是先排序后分页。(本来希望显示ID为112到126,结果变为105到128)

后来变为以下Sql代码查询:  SELECT *    
FROM(    
SELECT ROWNUM RN,TA.*    
FROM(   
select t.id ID, o.name YYB,u.name XM, t.MC   
from tZDYSX t,tuser u,lborganization o    
where t.cjr=u.id and u.orgid=o.orgcode and t.gx = 1 order by t.ID   
)TA WHERE ROWNUM <= 20   
)WHERE RN > 10  
SELECT * 
FROM( 
SELECT ROWNUM RN,TA.* 
FROM(
select t.id ID, o.name YYB,u.name XM, t.MC
from tZDYSX t,tuser u,lborganization o 
where t.cjr=u.id and u.orgid=o.orgcode and t.gx = 1 order by t.ID
)TA WHERE ROWNUM <= 20
)WHERE RN > 10

Tags:解决 Oracle 查询

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接