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 解决问题