Learn or Die

生涯勉強。Macです。

サブクエリを使用した更新でエラー

エラー

update contract set contract_date = (select contract _date from contract where status = 8) where course_id > 1000;

上記のクエリを実行すると以下のエラーが発生。
You can't specify target table 'contract' for update in FROM clause

原因

mysqlでは更新対象テーブルとサブクエリのテーブルが一緒なのはダメ。

対処方法

サブクエリ部分にエイリアスをつけたり、結合条件としての使用であれば動く。

update contract target
    inner join (select * from contract where status = 8) prev 
    on target.old_contract_id = prev.new_contract_id 
    set target.contract_date = prev.contract_date
    where target.course_id > 1000;

参考サイト

qiita.com