DBAtlas · Atlas für Datenbankbetrieb

1093: You can't specify target table 'x' for update in FROM clause (Zieltabelle des Updates nicht in FROM-Klausel erlaubt)

MySQL

Was 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 = ...;

In DBAtlas öffnen →

Weitere Einträge zu dieser Datenbank