MySQLでは、サブクエリ FROM 節と更新対象の両方に同じテーブルを使用することはでき
ない。
Source: MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.2.8.9 サブクエリ エラー
mysql> delete from user \ -> where user.id in \ -> (select user.id from user \ -> left join reserve_data on user.id = reserve_data.user_id where reserve_data.id is null); ERROR 1093 (HY000): You can't specify target table 'user' for update in FROM clause
このような場合は、以下のようにする。
mysql> delete from user \ -> where user.id in \ -> (select x.id from \ -> (select user.id from user left join reserve_data on user.id = reserve_data.user_id where reserve_data.id is null) \ -> as x \ -> ); Query OK, 350 rows affected (0.00 sec)
こうすると、暗黙的に一時テーブルが作成されるので、うまくいく。
Source: SQL Delete: can't specify target table for update in FROM clause - Stack Overflow
MYSQLのアップデート文の作成
mysqlではサブクエリ FROM 節と更新対象の両方に同じテーブルを使用することはできないらしいです。ちょっと解決に時間がかかったのでメモ。 updat…
[mysql] You can’t specify target table ‘xxx’ for update in FROM clause
[mysql] You can’t specify target table ‘xxx’ for update in …