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!