今天有个需求用oracle排序分页:
sql如下:
select *
from (select id, member_id, company_name, rownum rn
from (select t.id, t.member_id, t.company_name
from table1 t, table2 d
where t.id = d.opp_id(+)
and product_id_prefer = 1
and t.sales_id = 'sunny.zhaoy'
order by t.maturity asc, d.memo)
where rownum <= #endrow#) m
where m.rn >= #rowid#
这个sql是正确的,在开发库用了下,没有问题、、但是提交到测试库就有问题了,第三页和第四页,第五页第六页 怎么查询都是一样的结果。
比如我一页50条,那么下面两个sql查询的结果居然一模一样(总共600条):
select *
from (select id, member_id, company_name, rownum rn
from (select t.id, t.member_id, t.company_name
from table1 t, table2 d
where t.id = d.opp_id(+)
and product_id_prefer = 1
and t.sales_id = 'sunny.zhaoy'
order by t.maturity asc, d.memo)
where rownum <= 150) m
where m.rn >= 101
======================================================
select *
from (select id, member_id, company_name, rownum rn
from (select t.id, t.member_id, t.company_name
from table1 t, table2 d
where t.id = d.opp_id(+)
and product_id_prefer = 1
and t.sales_id = 'sunny.zhaoy'
order by t.maturity asc, d.memo)
where rownum <= 200) m
where m.rn >= 151
基本上应该没啥问题,问题出现在什么地方呢?
首先这跟oracle无关, 是典型的order by字段值不唯一造成分页记录混乱。
也就是说 我用 t.maturity asc, d.memo 排序,但是这两个字段的值可能都是相同的,或者很多都是不唯一的。。这时候就会出现这个问题了。
怎么解决呢?
其实很简单,只要在排序的时候加一个值唯一的字段的就可以了。最好是id
改成如下就ok了:
select *
from (select id, member_id, company_name, rownum rn
from (select t.id, t.member_id, t.company_name
from table1 t, table2 d
where t.id = d.opp_id(+)
and product_id_prefer = 1
and t.sales_id = 'sunny.zhaoy'
order by t.maturity asc, d.memo,t.id)
where rownum <= 150) m
where m.rn >= 101
======================================================
select *
from (select id, member_id, company_name, rownum rn
from (select t.id, t.member_id, t.company_name
from table1 t, table2 d
where t.id = d.opp_id(+)
and product_id_prefer = 1
and t.sales_id = 'sunny.zhaoy'
order by t.maturity asc, d.memo,t.id)
where rownum <= 200) m
where m.rn >= 151
相关推荐
解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题解决Oracle分页查询中排序与效率问题
本文将结合作者近日工作中,在ORACLE数据库分页查询时,遇到一个小问题,为大家讲解如何解决Oracle分页查询中排序与效率问题。
Oracle的分页查询语句以及Oracle分页的存储过程
kettle oracle循环分页迁移数据的完整例子,生成txt后FTP上传到远程服务器
Oracle分页(limit方式的运用)Oracle分页(limit方式的运用)
Oracle 存储过程 Oracle分页 oracle分页
Oracle的SQL分页实践
java实现oracle分页策略完整版,可当做参考类使用,有详细注释,适合初学者。
Oracle 分页实例 带分页控件用法 Oracle 实现数据列表分页。
SSH+ORACLE通用分页 开发项目中经常用这个分页方式!
SSH+ORACLE好用分页只要部署和添加SSH的JAR包就可以直接运行了!
Oracle分页查询Oracle分页查询Oracle分页查询Oracle分页查询
关于oracle 的分页、翻页的java源代码,结合JDBC连接数据库实现,比较基础的JDBC结合swing图形框架实现,适合Java初学者使用
oracle&jsp简单实现分页,注意到Oracle包
JSP+JDBC_真分页(基于Oracle数据库分页).
Oracle存储过程分页代码 Oracle存储过程分页代码 Oracle存储过程分页代码 Oracle存储过程分页代码 Oracle存储过程分页代码
完整的java+oracle 分页代码,供初学者使用
Oracle 高效分页存储过程 快速分页(修改版)
oracle 高效分页,使用SQL语句控制所查询出的行号
oracle分页查询并返回总记录数据的存储过程