Повторение некоторых строк с некоторыми смещениями в PostgreSQL - PullRequest
0 голосов
/ 12 июля 2020

Почему иногда я получаю повторяющиеся строки с разными смещениями, когда я использую вместе 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

1 Ответ

1 голос
/ 12 июля 2020

Проблема в том, что вы выполняете сортировку со столбцом (amount), который содержит повторяющиеся значения. Ваше предложение order by не является детерминированным c, поэтому результаты нестабильны.

Простым решением является использование второго критерия сортировки, чтобы разорвать связи (он выглядит как 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
...