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
Freigeben: 2025-01-22 20:01:08
Original
779 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage