oracle+视图分页重复,Oracle分页查询重复数据的问题

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

现在一般对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 后现象消失

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

更多Oracle相关信息见Oracle 专题页面 ?tid=12

logo.gif, 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值