Агрегатные функции в запросе на обновление?
Я пытаюсь установить значение в одной таблице на сумму значений в другой таблице. Что-то вроде этих строк:
UPDATE table1
SET field1 = SUM(table2.field2)
FROM table1
INNER JOIN table2 ON table1.field3 = table2.field3
GROUP BY table1.field3
конечно, как это стоит, это не сработает - SET
не поддерживает SUM
и он не поддерживает GROUP BY
.
Я должен знать это, но мой ум рисует пустоту. Что я делаю не так?
5 ответов:
UPDATE t1 SET t1.field1 = t2.field2Sum FROM table1 t1 INNER JOIN (select field3, sum(field2) as field2Sum from table2 group by field3) as t2 on t2.field3 = t1.field3
использование:
UPDATE table1 SET field1 = (SELECT SUM(t2.field2) FROM TABLE2 t2 WHERE t2.field3 = field2)
хорошая ситуация для использования CROSS APPLY
UPDATE t1 SET t1.field1 = t2.field2Sum FROM table1 t1 CROSS APPLY (SELECT SUM(field2) as field2Sum FROM table2 t2 WHERE t2.field3 = t1.field3) AS t2
Я знаю, что вопрос помечен SQL Server, но будьте осторожны с обновлением с JOIN, если вы используете PostgreSQL. @JBrooks ответ не будет работать:
UPDATE t1 SET t1.field1 = t2.field2Sum FROM table1 t1 INNER JOIN (...) as t2 on t2.field3 = t1.field3
вам придется адаптировать его к :
UPDATE table1 t1 SET t1.field1 = t2.field2Sum FROM (...) as t2 WHERE t2.field3 = t1.field3
см. параметр
from_list
это документ, чтобы получить почемуFROM
рассматривается PostgreSQL как самостоятельное соединение:https://www.postgresql.org/docs/9.5/static/sql-update.html#AEN89239