Maison > base de données > tutoriel mysql > Comment utiliser correctement les sous-requêtes dans les instructions de mise à jour MySQL pour éviter les erreurs de syntaxe ?

Comment utiliser correctement les sous-requêtes dans les instructions de mise à jour MySQL pour éviter les erreurs de syntaxe ?

Patricia Arquette
Libérer: 2024-10-26 17:37:30
original
653 Les gens l'ont consulté

How to Properly Use Subqueries in MySQL Update Statements to Avoid Syntax Errors?

Comprendre les sous-requêtes SQL dans les requêtes de mise à jour

Lors de la mise à jour de données dans MySQL, il est souvent nécessaire de référencer les valeurs d'autres tables à l'aide de sous-requêtes. Cependant, des erreurs peuvent se produire lorsque la sous-requête n'est pas correctement liée à l'instruction de mise à jour externe.

Considérez la requête suivante :

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

Cette requête échoue avec le message d'erreur :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
near 'a where a.CompetitionID = Competition.CompetitionID' at line 8
Copier après la connexion

Résolution de l'erreur

L'erreur se produit car la sous-requête interne n'est pas liée à la clause Where de l'instruction de mise à jour externe. La condition Where s'applique à la table cible (Concurrence) avant l'exécution de la sous-requête. Pour résoudre ce problème, une mise à jour multi-tables peut être utilisée :

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

Cette mise à jour multi-tables joint correctement la table Competition (alias C) à la sous-requête (alias A), garantissant que le les valeurs de la sous-requête sont disponibles pour le filtrage dans l'instruction de mise à jour externe.

Pour une démonstration en direct de la requête corrigée, reportez-vous au SQL Fiddle suivant : http://www.sqlfiddle.com/#!2/a74f3/ 1

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 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