首页 > 解决方案 > 在 PostgreSQL 中的某些偏移量中重复某些行

问题描述

当我同时使用 select、join、order by、offset 和 limit 时,为什么有时我会在不同的偏移量中重复行?

select * from users u
left join posts p on p.user_id = u.id
order by u.id
offset 0, limit 20

标签: databasepostgresqlselectsql-order-bypagination

解决方案


问题是您正在使用amount包含重复值的列 ( ) 进行排序。您的order by子句不是确定性的,因此结果不稳定。

一个简单的解决方案是使用第二个排序标准来打破平局(看起来可以这样user(id)做):

select *                                  -- better enumerate the columns here
from wallets w
inner join users u on u.id = w.user_id    -- your "left join" is actually "inner join"
where u.role = 'tester' and w.amount > 0
order by w.amount, u.id                   -- here is the second sorting criteria
offset 0, limit 20

推荐阅读