Home  >  Article  >  Database  >  Oracle 分页查询 重复数据的问题

Oracle 分页查询 重复数据的问题

WBOY
WBOYOriginal
2016-06-07 17:13:181074browse

现在一般对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 levelgo


--测试分页结果
第1-5条
select * from (
    select a.*,rownum r from (
        select t1.id from TEST t1
        order by t1.od desc
    ) a where rownum ) 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 ) 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

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn