GROUP BY в предложении UPDATE FROM - PullRequest
23 голосов
/ 11 марта 2011

Мне действительно нужно сделать что-то подобное:

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

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

1 Ответ

56 голосов
/ 11 марта 2011

Оператор 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 (это должна быть агрегатная функция, а не простая ссылка на столбец).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...