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



你可能感兴趣的:(数据库)