116 votes

Fonction d'agrégation dans une requête de mise à jour SQL ?

J'essaie de définir la valeur d'une table comme étant la somme des valeurs d'une autre table. Quelque chose de ce genre :

UPDATE table1
SET field1 = SUM(table2.field2)
FROM table1
INNER JOIN table2 ON table1.field3 = table2.field3
GROUP BY table1.field3

Bien sûr, dans l'état actuel des choses, ça ne marchera pas - SET ne prend pas en charge SUM et il ne supporte pas GROUP BY .

Je devrais le savoir, mais j'ai un trou de mémoire. Qu'est-ce que je fais de mal ?

170voto

JBrooks Points 4561
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

13voto

OMG Ponies Points 144785

Utilisez :

UPDATE table1
   SET field1 = (SELECT SUM(t2.field2) 
                   FROM TABLE2 t2 
                  WHERE t2.field3 = field2)

6voto

Paulo Santos Points 8148

Ou vous pouvez utiliser un mélange de JBrooks y Poneys OMG réponses :

UPDATE table1
   SET field1 = (SELECT SUM(field2)
                   FROM table2 AS t2
                  WHERE t2.field3 = t1.field3)
  FROM table1 AS t1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X