常用分页语句:
SELECT
*
FROM
(
SELECT
A.*
, ROWNUM RN
FROM
(SELECT * FROM TABLE_NAME) A
WHERE
ROWNUM <= N
)
WHERE
RN > M
此时的查询结果Oracle没有做任何的排序等,如果存储位置发生改变,分页查询有可能引起重复数据.
一般情况都会加上自定义排序功能,如时间倒叙:
SELECT
*
FROM
(
SELECT
A.*
, ROWNUM RN
FROM
(
SELECT
*
FROM
TABLE_NAME
ORDER BY
CREATED_TIME DESC
) A
WHERE
ROWNUM <= N
)
WHERE
RN > M
此时如果时间列一模一样,则出现分页数据显示重复的数据.
加上唯一主键排序:
ORDER BY CREATED_TIME DESC,ID
解决办法:
①sql语句中要有排序
②排序列如果没有唯一性,则后面跟上唯一列,如:主键
两个条件必须同时满足