DEV Community

d.yoshimitsu
d.yoshimitsu

Posted on

MySQLでサブクエリを使ってUPDATE

MySQLのリファレンスマニュアルに不吉な事が書いてあったけど、うまくいったのでメモ

You cannot update a table and select from the same table in a subquery.

やりたいこと

住所テーブルに顧客毎の並び順を保証する列を追加したい。
列の初期値として、既存データを並び替えて連番を発行する。

やったこと

UPDATE addresses t1,
    (SELECT 
        t3.id,
            SUM(t3.id >= t4.id) AS no
    FROM
        addresses t3
    INNER JOIN addresses t4 ON t3.user_id = t4.user_id
    GROUP BY t3.id) t2
SET 
    t1.no = t2.no
WHERE
    t1.id = t2.id

Top comments (0)