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

WBOY
풀어 주다: 2016-06-07 17:13:18
원래의
1121명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿