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