You can't specify target table 'xxx' for update in FROM clause

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

「You can't specify target table 'xxx' for update in FROM clause」への2件のフィードバック

  1. MYSQLのアップデート文の作成

    mysqlではサブクエリ FROM 節と更新対象の両方に同じテーブルを使用することはできないらしいです。ちょっと解決に時間がかかったのでメモ。 updat…

  2. [mysql] You can’t specify target table ‘xxx’ for update in FROM clause

    [mysql] You can’t specify target table ‘xxx’ for update in …

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください