Fehlerbehebung für den MySQL-Fehler „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben“
Das Problem:
Das Auftreten des Fehlers „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben“ während einer MySQL-UPDATE
-Anweisung, die auf eine Tabelle abzielt (z. B. pers
), weist auf eine Einschränkung in der Abfrageverarbeitung von MySQL hin.
Beispielszenario:
Angenommen, Sie haben die folgende UPDATE
Abfrage:
<code class="language-sql">UPDATE pers P SET P.gehalt = P.gehalt * 1.05 WHERE (P.chefID IS NOT NULL OR gehalt < ... ); </code>
Diese Abfrage versucht, die Spalte gehalt
in der Tabelle pers
basierend auf Bedingungen zu aktualisieren, die dieselbe pers
-Tabelle betreffen, was den Fehler verursacht.
Warum das passiert:
Die Einschränkung von MySQL verhindert mehrdeutige Aktualisierungen, bei denen die FROM
-Klausel zu unbeabsichtigten Änderungen führen könnte.
Die Lösung:
Die Problemumgehung besteht darin, mithilfe einer Unterabfrage einen temporären Alias der Tabelle zu erstellen:
<code class="language-sql">UPDATE pers P SET P.gehalt = (SELECT T.gehalt * 1.05 FROM (SELECT * FROM pers) AS T WHERE T.persID = P.persID) WHERE (P.chefID IS NOT NULL OR P.gehalt < ...);</code>
Diese überarbeitete Abfrage vermeidet den direkten Verweis auf pers
innerhalb der UPDATE
-Anweisung selbst. Die Unterabfrage (SELECT * FROM pers) AS T
erstellt einen temporären Tabellenalias T
, der es der UPDATE
-Anweisung ermöglicht, auf die erforderlichen Daten zu verweisen, ohne die MySQL-Regel zu verletzen.
Wichtiger Hinweis:
Während die Verwendung von SELECT *
das Beispiel vereinfacht, wählen Sie für eine optimale Leistung nur die erforderlichen Spalten aus der Tabelle pers
in der Unterabfrage aus. Fügen Sie immer eine relevante WHERE
-Klausel in Ihre Unterabfrage ein, um einen effizienten Datenabruf zu gewährleisten. Im obigen Beispiel ist WHERE T.persID = P.persID
entscheidend für die korrekte Zuordnung von Zeilen zwischen der Hauptanweisung UPDATE
und der Unterabfrage.
Das obige ist der detaillierte Inhalt vonWie löst man den MySQL-Fehler „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!