DBAtlas · データベース運用アトラス

1093: You can't specify target table 'x' for update in FROM clause(FROM 句で更新対象テーブルは指定できない)

MySQL

意味

UPDATE または DELETE 文で、更新/削除対象のテーブル自体を副クエリ (FROM 内) のソースとして直接使うことはできない。MySQL は同じテーブルをこの形でターゲットとソースの両方にすることを許可しない。

原因

UPDATE my_table ... WHERE id IN (SELECT ... FROM my_table ...) のように、副クエリが同じターゲットテーブルを直接読み取る。DELETE で同じテーブルを参照する副クエリ。

対処方法

副クエリを導出テーブルで包んで新しい別名を付け、MySQL が別のコピーとして扱うようにする: UPDATE my_table SET c = 1 WHERE id IN (SELECT id FROM (SELECT id FROM my_table WHERE condition) AS t); 代わりに自己結合として記述する: UPDATE my_table a JOIN my_table b ON ... SET a.c = ...;

DBAtlas で開く →

同じデータベースの他の項目