한 테이블의 값을 다른 테이블의 값의 합계로 설정하려고합니다. 이 라인을 따라 뭔가 :
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
.
나는 이것을 알아야하지만 내 마음은 공백을 그려 내고있다. 내가 뭘 잘못하고 있죠?
답변
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)
답변
또는 JBrooks 및 OMG Ponies 답변을 혼합하여 사용할 수 있습니다 .
UPDATE table1
SET field1 = (SELECT SUM(field2)
FROM table2 AS t2
WHERE t2.field3 = t1.field3)
FROM table1 AS t1
답변
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 태그가 있다는 것을 알고 있지만 PostgreSQL을 사용하는 경우 JOIN으로 UPDATE에주의하십시오 . @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
PostgreSQL에서 자체 조인으로 간주되는 from_list
이유를 확인하려면 문서의 매개 변수 를 참조하십시오 FROM
. https://www.postgresql.org/docs/9.5/static/sql-update.html#AEN89239
답변
아래와 같이 CTE를 사용할 수도 있습니다.
;WITH t2 AS (
SELECT field3, SUM(field2) AS field2
FROM table2
GROUP BY field3
)
UPDATE table1
SET table1.field1 = t2.field2
FROM table1
INNER JOIN t2 ON table1.field3 = t2.field3