Heim >Datenbank >MySQL-Tutorial >Wie löst man den MySQL-Fehler „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben'?

Wie löst man den MySQL-Fehler „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben'?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-22 20:01:08780Durchsuche

How to Solve MySQL's

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 UPDATEAbfrage:

<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!

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