пятница, 29 марта 2013 г.

UPDATE FROM SELECT в PostgreSQL

В процессе изучения PostgreSQL столкнулся со странным поведением оного при попытке выполнить подобный запрос:
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
Все записи перезаписывались первой записью из результата INNER JOIN. Зато отлично сработал такой код:
     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