打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle 分页查询 重复数据的问题
Oracle 分页查询 重复数据的问题
[日期:2012-04-19] 来源:Linux社区  作者:xyxcxzl 

 
现在一般对Oracle 分页查询实现如下 
select * from ( 
    select a.*,rownum r from ( 
        自己的sql 
    ) a where rownum <=? 
) where r > ?  


如果这个sql 按一个含有重复值的字段排序 

就会产生在不同页查出重复记录,并且某些记录查不到的现象(不是一定产生) 

测试代码如下 

CREATE TABLE TEST ( 
    ID   VARCHAR2(10) NOT NULL, 
    OD   VARCHAR2(10) NULL 
GO 

--插入测试数据 
insert into TEST 
select level,case when level<=3 then level else null end from dual connect by level<=10 
go 


--测试分页结果 
第1-5条 
select * from ( 
    select a.*,rownum r from ( 
        select t1.id from TEST t1 
        order by t1.od desc 
    ) a where rownum <=5 
) where r > 0 
返回结果 
行 ID R 
1 4 1 
2 8 2 
3 7 3 
4 6 4 
5 5 5 

第6-10条 
select * from ( 
    select a.*,rownum r from ( 
        select t1.id from TEST t1 
        order by t1.od desc 
    ) a where rownum <=10 
) where r > 5 
返回结果 
行 ID R 
1 6 6 
2 5 7 
3 3 8 
4 2 9 
5 1 10 

可以看到第一个结果集中id=5和id=6 在第二个结果集中也查到了  同时id=9 和id=10的记录都没查到 

解决方案如下 
如果出现满足上述两个条件的SQL 
     order by 后再加上表的主键; 
          如本例中 
          改为order by t1.od desc,t1.id 后现象消失 

如果有更好的解决方法, 希望能告知= = 


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-04/58879.htm
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
mysql、sql server、oracle数据库分页查询及分析(操作手册)
项目从oracle迁移到sqlserver后,代码中分页的相对改动 编辑
oracle 按ROWID实现分页查询
Oracle中 rownum与rowid的理解
仿Orm 自动生成分页SQL
Oracle分页小谈
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服