You can't specify target table '***' for update in FROM clause〜MySQLにて、サブクエリのみに適用されるエラーがある〜
こういう感じのSQLを書いた
UPDATE parent SET name = 'hogehoge' WHERE parent_id IN ( SELECT parent.parent_id FROM parent LEFT JOIN children as c ON parent.parent_id = c.parent_id );
そしたらこんなエラーが出てきた
You can't specify target table 'parent' for update in FROM clause
??
ぐぐったら公式サイトがでてきた
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.10.9 サブクエリーのエラー
このエラーは、テーブルを変更し、さらにサブクエリーで同じテーブルから選択しようとする次のような場合に発生します。
へえ。
解決方法
IN句のなかのSELECTを、更に副問合せにしてしまう。
適当にtmpという名前をつける。
UPDATE parent SET name = 'hogehoge' WHERE parent_id IN ( SELECT tmp.parent_id FROM ( SELECT parent.parent_id FROM parent JOIN children as c ON parent.parent_id = c.parent_id ) as tmp );
これでうごいた。