Oracle Order By后导分页数据重复问题解决办法。

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

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

SELECT
    * 
FROM
    ( SELECT
        ROW_.*,
        ROWNUM ROWNUM_ 
    FROM
        ( SELECT
            *
         FROM  T
         ORDER BY
            ORDER_COLUMN ) ROW_ 
        WHERE
            ROWNUM <= 10
         ) 
WHERE
    ROWNUM_ > 20


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

SELECT
    * 
FROM
    ( SELECT
        ROW_.*,
        ROWNUM ROWNUM_ 
    FROM
        ( SELECT
            *
         FROM  T
         ORDER BY
            ORDER_COLUMN ,ROWID) ROW_ 
        WHERE
            ROWNUM <= 10
         ) 
WHERE
    ROWNUM_ > 20



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值