oracle 关于 union+order by+ rownum分页问题

SELECT
    *
FROM
    (
        SELECT
            TMP_PAGE.*, ROWNUM ROW_ID
        FROM
            (
                SELECT * FROM(
SELECT TR."ID", TR."NAME",TR.BANJI FROM T_REGISTER tr
UNION
SELECT TR."ID", TR."NAME",TR.BANJI FROM T_REGISTER tr)aa ORDER BY AA.BANJI
            ) TMP_PAGE
        WHERE
            ROWNUM <= 20
    )
WHERE
    ROW_ID > 10;

结果

分页变成20到30条数据

SELECT
    *
FROM
    (
        SELECT
            TMP_PAGE.*, ROWNUM ROW_ID
        FROM
            (
                SELECT * FROM(
SELECT TR."ID", TR."NAME",TR.BANJI FROM T_REGISTER tr
UNION
SELECT TR."ID", TR."NAME",TR.BANJI FROM T_REGISTER tr)aa ORDER BY AA.BANJI
            ) TMP_PAGE
        WHERE
            ROWNUM <= 30
    )
WHERE
    ROW_ID > 20;

数据依然不变 

解决:

把 order  by 后面的属性 替换成 ID

②SELECT
    *
FROM
    (
        SELECT
            TMP_PAGE.*, ROWNUM ROW_ID
        FROM
            (
SELECT BB.*,ROWNUM FROM(
                SELECT * FROM(
SELECT TR."ID", TR."NAME",TR.BANJI FROM T_REGISTER tr
UNION
SELECT TR."ID", TR."NAME",TR.BANJI FROM T_REGISTER tr)aa ORDER BY AA.BANJI  )bb
            ) TMP_PAGE
        WHERE
            ROWNUM <= 30
    )
WHERE
    ROW_ID > 20;

在你order by之后的结果集再包一层SELECT  BB.* , ROWNUM  FROM ()bb 解决问题

猜你喜欢

转载自blog.csdn.net/panlin1506913260/article/details/81938490
今日推荐