1093: You can't specify target table 'x' for update in FROM clause (Zieltabelle des Updates nicht in FROM-Klausel erlaubt)
MySQLWas bedeutet das?
In einem UPDATE- oder DELETE-Statement kann die zu aktualisierende/zu löschende Tabelle selbst nicht direkt als Quelle in einer Unterabfrage (im FROM) verwendet werden. MySQL erlaubt nicht, dass dieselbe Tabelle auf diese Weise zugleich Ziel und Quelle ist.
Ursache
Eine Unterabfrage, die direkt dieselbe Zieltabelle liest, wie in UPDATE my_table ... WHERE id IN (SELECT ... FROM my_table ...); eine Unterabfrage in einem DELETE, die dieselbe Tabelle referenziert.
Lösung
Umschließe die Unterabfrage mit einer Derived Table und gib ihr einen neuen Alias, damit MySQL sie als separate Kopie behandelt: UPDATE my_table SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM my_table WHERE condition) AS t); Alternativ schreibe sie als Self-Join: UPDATE my_table a JOIN my_table b ON ... SET a.c = ...;
Weitere Einträge zu dieser Datenbank
- 1050Table already exists (Tabelle existiert bereits)
- 1051Unknown table 'x' (unbekannte Tabelle)
- 1091Can't DROP 'x'; check that column/key exists (DROP nicht möglich; Spalte/Schlüssel existiert nicht)
- 1305PROCEDURE does not exist (Prozedur existiert nicht)
- 1227Access denied; you need (at least one of) the PRIVILEGE (Zugriff verweigert; Berechtigung erforderlich)
- 3730Cannot drop table referenced by a foreign key constraint (von Foreign Key referenzierte Tabelle kann nicht gelöscht werden)
- 2013Lost connection to MySQL server during query (Verbindung zum MySQL-Server während der Abfrage verloren)