本文最后更新于 2025-02-03,文章内容可能已经过时。

一、背景

PostgreSQL单字段排序,排序字段中可能会出现重复,这样就会导致我们在进行分页查询时会出现一些和预期不相符的现象,如这个数据在第一页出现了,然后再第二页又出现。

二、问题描述

两次分页查询出现了同一条id为xxx的记录,但实际上数据库里只有一条id为xxx的记录,查询结果莫名出现了重复数据。

三、解决方式

核心思路就是让order by拥有唯一性。

具体解决方式就是,补充一个有唯一约束或者大概率唯一的字段作为次级排序条件。

例如,补充主键作为排序条件:

SELECT id,XXX1,XXX2 FROM table ORDER BY xxx1 DESC,id ASC

四、预防

n对1关系的连表查询时,如果根据1端表的字段排序就肯定要加一个n端的id