【MySQL】Select結果でUpdateするSQLの書き方
2018/03/28
あるテーブルで、姓名カラムを2つ(姓:name_family、名:name_first)と分かれていたのが仕様変更となり、姓名のカラムを name カラム 1つに結合することになりました。
その際、既にインサートされているレコードの「姓」「名」を「姓 名」と全角スペース区切りで結合しつつアップデートする必要がありましたので、備忘録としてその方法をポストします。
Select結果でUpdateする
レコード例
以下の様なテーブルが有るとします。
上記レコードを、下の様にしたい場合の方法です。
Update と Concat
答えを書くと、以下のようになります。
1 2 3 4 5 |
UPDATE `profiles` AS tbl SET tbl.name = CONCAT(tbl.name_family, ' ', tbl.name_first) WHERE tbl.id = tbl.id; |
あくまで Update文として書き、SET 句でどのカラムを持ってきて上書きするのかを指定します。
WHERE 句では単に同じ id で、という指定です。
文字列の結合には CONCAT を使用。
CONCAT(tbl.name_family, ' ', tbl.name_first) とすることで「姓+全角スペース+名」を実現させます。
別テーブルの値でアップデートする場合
RequestテーブルのcolumnAを、OrderテーブルのcolumnBの値で上書きする
違うテーブルのレコードを持ってくる場合も以下のようにして実現可能。
requests と orders テーブルを例にしてみます。
1 2 3 4 5 6 7 |
UPDATE `requests` AS req, `orders` AS ord SET req.columnA = ord.columnB WHERE req.id = ord.request_id; |
なるほどですね。