最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-09 11:31:11
文档

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

Oracle分页查询重复数据的问题:现在一般对Oracle 分页查询实现如下 select * from ( select a.*,rownum r from ( 自己的sql ) a where rownum 现在一般对Oracle 分页查询实现如下 select * from ( select a.*,rownum r from ( 自己的sql )
推荐度:
导读Oracle分页查询重复数据的问题:现在一般对Oracle 分页查询实现如下 select * from ( select a.*,rownum r from ( 自己的sql ) a where rownum 现在一般对Oracle 分页查询实现如下 select * from ( select a.*,rownum r from ( 自己的sql )


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

文档

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

Oracle分页查询重复数据的问题:现在一般对Oracle 分页查询实现如下 select * from ( select a.*,rownum r from ( 自己的sql ) a where rownum 现在一般对Oracle 分页查询实现如下 select * from ( select a.*,rownum r from ( 自己的sql )
推荐度:
标签: 查询 数据 问题
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top