1. 程式人生 > >oracle 關於 union+order by+ rownum分頁問題

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 解決問題