JavaScriptを有効にしてください

【Mysql】#hy000you can't specify target table 'hoge' for update in from clause の解決方法

 ·  ☕ 1 分で読めます

【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 というエラーが出てきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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 文をラップします。
こうすることによって更新が可能になります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
UPDATE
SET
    name = 'hoge'
FROM
    hoge
WHERE
    column1 IN(
        select
            column1
        from
            (
                SELECT
                    column1
                FROM
                    hoge
                ORDER BY
                    created_at DESC
                LIMIT 1
            ) tmp
    )

参考

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.11 UPDATE 構文

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer