Fehlerbehebung bei einer MySQL-Update-Abfrage mit einer Unterabfrage
Bei einer MySQL-Update-Abfrage mit einer Unterabfrage kann ein Fehler wie dieser auftreten:
#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
Abfrage:
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
Problem:
Der Fehler entsteht durch die where-Klausel in der äußeren Die Update-Anweisung (wobei a.CompetitionID = Competition.CompetitionID) kann nicht mit der inneren Unterabfrage verknüpft werden. Der Where-Filter wird auf die zu aktualisierende Tabelle (Konkurrenz) angewendet, bevor die innere Unterabfrage ausgeführt wird.
Lösung:
Um dieses Problem zu beheben, verwenden Sie eine Aktualisierung mehrerer Tabellen :
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
Erklärung:
Diese Abfrage verknüpft die Wettbewerbstabelle (Alias C) mit einer Unterabfrage (Alias A), die die Anzahl der Teams berechnet jeden Wettbewerb. Die Beitrittsbedingung ist auf CompetitionID. Anschließend setzt die Aktualisierungsanweisung die Spalte „NumberOfTeams“ in der Competition-Tabelle auf den berechneten Wert aus der Unterabfrage.
Demo:
Sie können diese aktualisierte Abfrage auf SQL Fiddle ausprobieren : http://www.sqlfiddle.com/#!2/a74f3/1
Das obige ist der detaillierte Inhalt vonWie behebe ich „Fehler Nr. 1064: Sie haben einen Fehler in Ihrer SQL-Syntax' in der MySQL-Update-Abfrage mit Unterabfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!