Oracle中sql语句因为排序导致查询结果集分页数据重复

记一次生产中因为排序导致的分页问题
问题产生

SELECT *
FROM (
	SELECT TMP.*, ROWNUM AS ROW_ID
	FROM (
		SELECT *
		FROM A
		WHERE status = '1'
		ORDER BY SORT_ORDER ASC
	) TMP
	WHERE ROWNUM <= ?
)
WHERE ROW_ID > ?

因为表A中ORDER BY SORT_ORDER ASC 按照SORT_ORDER 排序
如果出现多个SORT_ORDER 字段相同的时候,分页每次取出的结果集中ROWNUM不能固定下来
解决办法
将SORT_ORDER 字段按照1-n正常排序即可保证结果集固定,避免分页问题产生

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐