Maison > base de données > tutoriel mysql > Comment mettre à jour un champ de table avec la somme d'une autre table à l'aide de SQL ?

Comment mettre à jour un champ de table avec la somme d'une autre table à l'aide de SQL ?

Linda Hamilton
Libérer: 2024-12-22 19:23:11
original
605 Les gens l'ont consulté

How to Update a Table Field with the Sum from Another Table Using SQL?

Requête de mise à jour SQL avec fonction d'agrégation

Cette question explore l'utilisation de fonctions d'agrégation dans les requêtes de mise à jour SQL. L'utilisateur tente de mettre à jour un champ d'une table avec la somme des valeurs d'une autre table. Cependant, leur requête ne fonctionne pas en raison de problèmes syntaxiques.

Analyse

La requête initiale présentée par l'utilisateur contient deux défauts principaux :

  1. Mélange de clauses SET et GROUP BY : SET ne supporte pas GROUP BY, et vice versa.
  2. Utilisation directe d'un agrégat fonction (SUM) dans la clause SET : SET attend une valeur unique, pas une agrégation.

Solution

Pour résoudre ces problèmes, une sous-requête doit être employés. La sous-requête calculera la somme des valeurs de la deuxième table, en les regroupant par champ commun. Le résultat de cette sous-requête sera ensuite joint à la première table et utilisé pour mettre à jour le champ en conséquence.

La requête correcte :

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
Copier après la connexion

Dans cette requête :

  • La sous-requête calcule la somme du champ2 de la table2 pour chaque valeur unique du champ3.
  • La requête externe joint la table1 avec le résultat de la sous-requête en utilisant le champ field3.
  • Le field1 de la table1 est mis à jour avec la field2Sum calculée dans la sous-requête.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal