当前位置: 代码迷 >> Oracle开发 >> order by 子句中字段值不唯一导致检索结果出现重复的有关问题
  详细解决方案

order by 子句中字段值不唯一导致检索结果出现重复的有关问题

热度:98   发布时间:2016-04-24 06:30:38.0
order by 子句中字段值不唯一导致检索结果出现重复的问题
下面是所有数据:

我在执行下面的SQL时出来5条检索结果:

SELECT *
  FROM (SELECT A.*, ROWNUM RN
          FROM (select formual.opercharacter,
                       formual.subject,
                       ...
                  from formual
                  where ...
                  order by formual.opercharacter desc) A
         WHERE ROWNUM <= 5)
 WHERE RN >= 1;

结果:

然后执行另一个SQL的时候,结果如下:

SELECT *
  FROM (SELECT A.*, ROWNUM RN
          FROM (select formual.opercharacter,
                       formual.subject,
                       ...
                  from formual
                  where ...
                  order by formual.opercharacter desc) A
         WHERE ROWNUM <= 10)
 WHERE RN >= 6;

结果:


其实主要就是翻页的问题,我想问的是,为什么检索出来的结果会有重复数据?总的条数又是正确的,但是却有两条数据没有检索出来(也就是被重复的数据给冲掉了)?
我觉得是order by 子句中字段值不唯一导致的,因此我把opercharacter 修改成 subject后就没有问题了,但是还是不明白为什么。
求大神赐教~~
------解决思路----------------------
好像oracle对此解释是正常的,因为是两次查询。
一般排序字段不唯一的时候,为了保证多次查询不出现重复记录,排序需要再加上能保证查询唯一的列如主键。
------解决思路----------------------
因为你所排序字段不唯一,可以在你的排序字段之后加上,rowid排序。


order by ...,rowid
  相关解决方案