Heim  >  Artikel  >  Datenbank  >  Wie verwende ich Unterabfragen in MySQL-Update-Anweisungen richtig, um Syntaxfehler zu vermeiden?

Wie verwende ich Unterabfragen in MySQL-Update-Anweisungen richtig, um Syntaxfehler zu vermeiden?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 17:37:30491Durchsuche

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

SQL-Unterabfragen in Aktualisierungsabfragen verstehen

Beim Aktualisieren von Daten in MySQL ist es häufig erforderlich, mithilfe von Unterabfragen auf Werte aus anderen Tabellen zu verweisen. Es können jedoch Fehler auftreten, wenn die Unterabfrage nicht ordnungsgemäß mit der äußeren Aktualisierungsanweisung verknüpft ist.

Betrachten Sie die folgende 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

Diese Abfrage schlägt mit der Fehlermeldung fehl:

#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

Beheben des Fehlers

Der Fehler tritt auf, weil die innere Unterabfrage nicht mit der where-Klausel in der äußeren Update-Anweisung zusammenhängt. Die Where-Bedingung gilt für die Zieltabelle (Competition), bevor die Unterabfrage ausgeführt wird. Um dieses Problem zu beheben, kann ein Multi-Table-Update eingesetzt werden:

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

Dieses Multi-Table-Update verbindet die Competition-Tabelle (Alias ​​C) ordnungsgemäß mit der Unterabfrage (Alias ​​A) und stellt so sicher, dass die Die Werte der Unterabfrage stehen zum Filtern in der äußeren Aktualisierungsanweisung zur Verfügung.

Eine Live-Demonstration der korrigierten Abfrage finden Sie im folgenden SQL Fiddle: http://www.sqlfiddle.com/#!2/a74f3/ 1

Das obige ist der detaillierte Inhalt vonWie verwende ich Unterabfragen in MySQL-Update-Anweisungen richtig, um Syntaxfehler zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn