Maison > base de données > tutoriel mysql > Comment mettre à jour une table avec une sous-requête dans la clause SET dans MySQL ?

Comment mettre à jour une table avec une sous-requête dans la clause SET dans MySQL ?

Mary-Kate Olsen
Libérer: 2024-10-27 02:41:03
original
347 Les gens l'ont consulté

How to Update a Table with a Subquery in the SET Clause in MySQL?

requête de mise à jour mysql utilisant une sous-requête

Une tentative de mise à jour d'une table à l'aide d'une sous-requête dans le cadre de la clause SET a rencontré une erreur, la syntaxe étant signalée comme incorrecte. Le problème spécifique peut être attribué à la clause WHERE suivante dans l'instruction UPDATE.

Update Competition
Set Competition.NumberOfTeams =
(
SELECT count(*) as NumberOfTeams
FROM PicksPoints
where UserCompetitionID is not NULL
group by CompetitionID
) a
where a.CompetitionID =  Competition.CompetitionID
Copier après la connexion

Le problème survient car le filtre WHERE de l'instruction de mise à jour externe s'exécute avant la sous-requête interne. Par conséquent, les résultats de la sous-requête ne peuvent pas être utilisés pour filtrer la table en cours de mise à jour. Une solution courante à ce problème consiste à utiliser une mise à jour multi-tables.

Update
  Competition as C
  inner join (
    select CompetitionId, count(*) as NumberOfTeams
    from PicksPoints as p
    where UserCompetitionID is not NULL
    group by CompetitionID
  ) as A on C.CompetitionID = A.CompetitionID
set C.NumberOfTeams = A.NumberOfTeams
Copier après la connexion

Dans cette requête révisée, une mise à jour multi-tables est utilisée, avec Competition comme table principale à mettre à jour (alias C). . Nous effectuons une jointure interne entre Competition et une sous-requête (alias A) qui calcule le NumberOfTeams pour chaque CompetitionId. La clause WHERE est désormais utilisée pour filtrer le résultat de la jointure, garantissant que seules les lignes correspondantes dans les deux tables sont mises à jour.

[Démo](http://www.sqlfiddle.com/#!2/a74f3/1 ) pour la requête mise à jour.

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