[SQLite3] 列の値を一括変換する


とある初心者の備忘録です。

ある列の値を一括で置き換えたい場合のクエリ。UPDATE時に SET col = value のvalueの部分を動的に持ってきたいケースです。

例えば、usersテーブルに部署(dept)を名前でベタ書きしてしまっているテーブルについて(そんな初歩的な設計ミスをするなよ、という話は棚上げします・・・)。

後から部署テーブル(departments)の定義を行ったので、usersテーブルにあるdept列は全てIDで置き換えたい、というケースです。
SET の中にサブクエリを書けるので、この要件を満たすクエリは以下の1本で書くことが可能です。

UPDATE
    users
SET    users.dept    =    (
        SELECT
            departments.id
        FROM
            departments
        WHERE
            users.dept    =    users.dept
    )
;

SQL勉強中なので、ネタができたら随時書き足していく予定。