Maison  >  Article  >  base de données  >  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
Mary-Kate Olsenoriginal
2024-10-27 02:41:03227parcourir

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

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

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!

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