【Mysql】#hy000you can't specify target table 'hoge' for update in from clause の解決方法
【Mysql】#hy000you can’t specify target table ‘hoge’ for update in from clause の解決方法
MysqlでSQLを実行したら#hy000you can't specify target table 'hoge' for update in from clause というエラーが出たので解決方法メモ。
エラー
以下のようなSQLを実行すると #hy000you can't specify target table 'hoge' for update in from clause というエラーが出てきます。
UPDATE
SET name = 'hoge'
FROM
hoge
WHERE
column1 IN(
SELECT
column1
FROM
hoge
ORDER BY
created_at DESC
LIMIT 1
)
原因
Mysqlのサブクエリで更新対象と同じテーブルを使用することが出できいとのこと。
テーブルを更新し、さらにサブクエリーで同じテーブルから選択することはできません。 MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.11 UPDATE 構文
おそらく、更新対象のサブクエリ内のテーブルの条件によっては無限ループのような事が発生し得るので制御してると思われます。
解決方法
サブクエリの中でさらにサブクエリを使用して select 文をラップします。
こうすることによって更新が可能になります。
UPDATE
SET
name = 'hoge'
FROM
hoge
WHERE
column1 IN(
select
column1
from
(
SELECT
column1
FROM
hoge
ORDER BY
created_at DESC
LIMIT 1
) tmp
)