当前位置: 代码迷 >> Oracle开发 >> order by 某字段,第N页和第N+1页的数据是一样的,这是咋回事
  详细解决方案

order by 某字段,第N页和第N+1页的数据是一样的,这是咋回事

热度:55   发布时间:2016-04-24 06:28:46.0
order by 某字段,第N页和第N+1页的数据是一样的,这是怎么回事?
问题描述:
查询一张表,使之以每页15条数据来显示。可以按照某字段来排序。可问题是,当点击到第4页时发现与第3页的数据内容完全一样。页面上总的数据量是对的,就是某几页内容存在相同。
SQL语句:
select * from (select row_.*,rownum rownum_ from (select doc_seq,doc_title from doc_card d where 1=1  and handover_state =1 and  if_store =2 and  archive_id=1 and room_id=3  and arc_type=0  order by d.doc_year  desc ) row_ where rownum <= 60) where rownum_>45
order by 之后的字段可以随意替换。doc_year不是主键。如果我在order by 之后再加一个主键字段的话就不会出现这种问题了。
我想问的是,是什么原因导致会有重复内容出现?难道order by 还有什么更深入的原理与机制吗?


------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

首先第N页和第N+1页的数据获取是执行了两次查询得到的结果
这两次查询中查询
select doc_seq,doc_title from doc_card d where 1=1  and handover_state =1 and  if_store =2 and  archive_id=1 and room_id=3  and arc_type=0  order by d.doc_year  desc
得到的结果顺序有可能是不一样的,也就是说再用rownum筛选前的结果就是不一样的

那现在的问题是,两页的数据内容一模一样,是不是Oracle在执行的时候直接获取上一次的数据结果?不然按你的说法,后一页至少会有部分数据不一样啊。

如果你这两页的doc_year全部相同的话不排除有这个可能

如你所说,这两页的doc_year是相同的。
我现在假设有三页doc_year都是相同的,那么我点击第一页后,再点击第二页,这时是不是又进行了排序了呢?就算每次排序后顺序可能不一样,但如果第二页跟第一页的内容一模一样的话,就应该不能用排序顺序不一样来解释了吧。

这个是数据缓冲区的问题,由于第一次结果已经在缓冲区了,第一次查询的结果恰好也可以作为第二次查询的结果,数据库就直接从缓冲区返回结果了
  相关解决方案