GROUP BY в пункте UPDATE FROM

Мне действительно нужно сделать что-то вроде этого:

UPDATE table t1 
SET column1=t2.column1 
FROM table t2 
INNER JOIN table t3 
USING (column2) 
GROUP BY t1.column2;

Но postgres говорит, что у меня есть синтаксическая ошибка в отношении предложения GROUP BY. Каким образом это можно сделать?

Ответ 1

Оператор UPDATE не поддерживает GROUP BY, см. документацию. Если вы пытаетесь обновить t1 соответствующей строкой из t2, вы хотите использовать предложение WHERE примерно так:

UPDATE table t1 SET column1=t2.column1
FROM   table t2
JOIN   table t3 USING (column2)
WHERE  t1.column2=t2.column2;

Если вам нужно сгруппировать строки из t2/t3 перед назначением t1, вам нужно будет использовать подзапрос примерно так:

UPDATE table t1 SET column1=sq.column1
FROM  (
   SELECT t2.column1, column2
   FROM   table t2
   JOIN   table t3 USING (column2)
   GROUP  BY column2
   ) AS sq
WHERE  t1.column2=sq.column2;

Хотя сформулировано так, что не будет работать, потому что t2.column1 не включен в оператор GROUP BY (он должен быть агрегатной функцией, а не простой ссылкой на столбец).

В противном случае, что именно вы пытаетесь сделать здесь?