サブクエリを使用した更新でエラー
エラー
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;