Maison > base de données > tutoriel mysql > Comment corriger « Erreur n° 1064 : vous avez une erreur dans votre syntaxe SQL » dans la requête de mise à jour MySQL avec sous-requête ?

Comment corriger « Erreur n° 1064 : vous avez une erreur dans votre syntaxe SQL » dans la requête de mise à jour MySQL avec sous-requête ?

Patricia Arquette
Libérer: 2024-10-26 12:06:29
original
828 Les gens l'ont consulté

How to Fix

Dépannage d'une requête de mise à jour MySQL avec une sous-requête

Dans une requête de mise à jour MySQL avec une sous-requête, vous pouvez rencontrer une erreur similaire à celle-ci :

#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

Requête :

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

Problème :

L'erreur se produit parce que la clause Where dans la clause externe L'instruction de mise à jour (où a.CompetitionID = Competition.CompetitionID) ne peut pas être liée à la sous-requête interne. Le filtre Where est appliqué à la table en cours de mise à jour (Concurrence) avant l'exécution de la sous-requête interne.

Résolution :

Pour résoudre ce problème, utilisez 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

Explication :

Cette requête rejoint la table Compétition (alias C) avec une sous-requête (alias A) qui calcule le nombre d'équipes pour chaque compétition. La condition d’adhésion est sur CompetitionID. Ensuite, l'instruction de mise à jour définit la colonne NumberOfTeams dans la table Competition sur la valeur calculée à partir de la sous-requête.

Démo :

Vous pouvez essayer cette requête mise à jour sur SQL Fiddle : 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