MySQLで、副問い合わせで検索した複数のカラムの値を条件として、同じテーブルのデータを削除する
タイトルに書いたことを次のように実施しようとしてエラーとなった。
delete from スキーマ名.テーブル名 where (カラム1,カラム2) IN( SELECT カラム1 ,MAX(カラム2) as カラム2 from スキーマ名.テーブル名 where 条件カラム3=1 and カラム1 IN (1,2,3・・・,998,999) group by カラム1 )
エラー内容は下記。
Error Code: 1093. You can't specify target table 'テーブル名' for update in FROM clause 0.000 sec
selectした結果を直接条件句へ渡すのではなく、一度別名(この場合tmp)テーブルを用意して、そこから取得した結果を渡すとうまくいく。
delete from スキーマ名.テーブル名 where (カラム1,カラム2) IN( SELECT カラム1,カラム2 as カラム2別名 from (SELECT カラム1 ,MAX(カラム2) as カラム2 from スキーマ名.テーブル名 where 条件カラム3=1 and カラム1 IN (1,2,3・・・,998,999) group by カラム1) as tmp) ;