В процессе изучения PostgreSQL столкнулся со странным поведением оного при попытке выполнить подобный запрос:
Все записи перезаписывались первой записью из результата INNER JOIN. Зато отлично сработал такой код:UPDATE Table SET Table.col1 = other_table.col1, Table.col2 = other_table.col2 FROM Table INNER JOIN other_table ON Table.id = other_table.id
UPDATE user u
SET balance = balance + p.amount
FROM (
SELECT user_id, SUM(amount) AS amount
FROM payment
WHERE id IN (36, 38, 40)
GROUP BY
user_id
) p
WHERE u.id = p.user_id