Heim >Datenbank >MySQL-Tutorial >Wie aktualisiere ich eine Tabelle mit einer Unterabfrage in der SET-Klausel in MySQL?

Wie aktualisiere ich eine Tabelle mit einer Unterabfrage in der SET-Klausel in MySQL?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 02:41:03340Durchsuche

How to Update a Table with a Subquery in the SET Clause in MySQL?

MySQL-Aktualisierungsabfrage mithilfe einer Unterabfrage

Beim Versuch, eine Tabelle mithilfe einer Unterabfrage als Teil der SET-Klausel zu aktualisieren, ist ein Fehler aufgetreten. wobei die Syntax als falsch gekennzeichnet wird. Das spezifische Problem kann auf die nachfolgende WHERE-Klausel in der UPDATE-Anweisung zurückgeführt werden.

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

Das Problem entsteht, weil der WHERE-Filter in der äußeren Update-Anweisung vor der inneren Unterabfrage ausgeführt wird. Daher können die Ergebnisse der Unterabfrage nicht zum Filtern der zu aktualisierenden Tabelle verwendet werden. Eine gängige Lösung für dieses Problem ist die Verwendung eines Multi-Table-Updates.

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

In dieser überarbeiteten Abfrage wird ein Multi-Table-Update verwendet, wobei Competition die primäre Tabelle ist, die aktualisiert werden soll (Alias ​​C). . Wir führen einen inneren Join zwischen Competition und einer Unterabfrage (Alias ​​A) durch, die die NumberOfTeams für jede CompetitionId berechnet. Die WHERE-Klausel wird jetzt zum Filtern des Join-Ergebnisses verwendet, um sicherzustellen, dass nur übereinstimmende Zeilen in beiden Tabellen aktualisiert werden.

[Demo](http://www.sqlfiddle.com/#!2/a74f3/1 ) für die aktualisierte Abfrage.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich eine Tabelle mit einer Unterabfrage in der SET-Klausel in MySQL?. 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