加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle 分页数据重复的问题

发布时间:2020-12-12 15:32:45 所属栏目:百科 来源:网络整理
导读:oracle分页采用三层嵌套+rownum分页时,如果有order by,就会有一个小坑,一不留神就掉进去了。 前置条件:分页脚本中存在order by 问题暴露:分页时好时坏 问题本质:order by 在相同的数据下,排序具有不确定性 解决方法:最简单的办法,习惯性在order by

oracle分页采用三层嵌套+rownum分页时,如果有order by,就会有一个小坑,一不留神就掉进去了。

前置条件:分页脚本中存在order by

问题暴露:分页时好时坏

问题本质:order by 在相同的数据下,排序具有不确定性

解决方法:最简单的办法,习惯性在order by后面加rownum或rowid,推荐加rowid

补充:如果有分析函数的情况按照具体情况处理,不可千篇一律


搬砖:

-------------------------------------------------------

今天公司系统中的一个分页的界面出现了重复数据的问题,检查之后确认前端分页控件及后台的SQL语句都没有问题且该表也没有存在重复的数据记录。在继续分析之后发现是由于排序的字段出现大批的重复值造成的。

例如以下语句中,ORDER_COLUMN列并不能确定其唯一性,那么ORACLE在每次执行排序时并不能确定数据的唯一性,导致同样的排序顺序但是每次运行时并不能保证得到一样的结果。

[sql] view plain copy
  1. SELECT
  2. *
  3. FROM
  4. (SELECT
  5. ROW_.*,
  6. ROWNUMROWNUM_
  7. *
  8. FROMT
  9. ORDERBY
  10. ORDER_COLUMN)ROW_
  11. WHERE
  12. ROWNUM<=10
  13. )
  14. WHERE
  15. ROWNUM_>20

有以上的结论之后处理方法也就简单明了了,Order By中的字段必须能够确保唯一即可:

copy
    ORDER_COLUMN,ROWID)ROW_
  1. ROWNUM_>20

参考自:http://blog.csdn.net/q710571977/article/details/42873163

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读