Maison >base de données >tutoriel mysql >Comment puis-je mettre à jour une table avec la somme des valeurs d'une autre table en SQL ?

Comment puis-je mettre à jour une table avec la somme des valeurs d'une autre table en SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 02:37:14268parcourir

How Can I Update a Table with the Sum of Values from Another Table in SQL?

Agrégation dans les requêtes SQL UPDATE : une solution concise

Dans les opérations de base de données, la mise à jour des valeurs de table en fonction de fonctions d'agrégation peut poser un défi. Explorons un scénario courant dans lequel l'objectif est de définir la valeur d'une table sur la somme des valeurs d'une autre table.

Considérons la requête suivante :

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

Bien qu'intuitive, cette requête échouera en raison de deux contraintes clés : SET ne prend pas en charge les fonctions d'agrégation telles que SUM et GROUP BY n'est pas autorisé dans les requêtes UPDATE.

Pour résoudre ce problème, nous pouvons utilisez une sous-requête pour calculer la somme globale, puis utilisez la valeur mise à jour dans la requête UPDATE.

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

Dans cette requête affinée :

  • La sous-requête calcule la somme globale pour chaque valeur unique dans table2.field3.
  • Le résultat mis à jour, stocké sous field2Sum, est joint à table1 à l'aide de la colonne commune field3.
  • La condition JOIN garantit que la valeur SUM de la table2 est affectée à la ligne correspondante correcte dans la table1.

En employant cette approche, vous pouvez effectuer avec succès des mises à jour globales dans SQL et obtenez les résultats de manipulation de données souhaités.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn