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!