LoginSignup
101
101

More than 5 years have passed since last update.

MySQLで複数行を一括でUPDATEする

Posted at

FrogApps 技術ブログ始めました!
RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps


データベースを運用していると、一気にデータを投入したり、更新する必要が出てきます。
MySQLではINSERT文では複数行同時に更新できますが、UPDATEでは用意されていません。

そこで、UPDATEとJOINを組み合わせて、既存のテーブルを一気に更新してみます。

例) original_dataテーブルのbodyの値を複数行一気に更新する

まずは元データを作ります。

CREATE TABLE tbl1(id INTEGER PRIMARY KEY, body VARCHAR(255));
INSERT INTO tbl1(id, body) VALUES(1, '001');
INSERT INTO tbl1(id, body) VALUES(2, '002');
INSERT INTO tbl1(id, body) VALUES(3, '003');
INSERT INTO tbl1(id, body) VALUES(4, '004');
INSERT INTO tbl1(id, body) VALUES(5, '005');
INSERT INTO tbl1(id, body) VALUES(6, '006');

このうち、書き換えたい行の情報をテーブルに挿入します。

CREATE TEMPORARY TABLE tbl1map(tbl1_id INTEGER, body varchar(255));
INSERT INTO tbl1map(tbl1_id,body) VALUES(1,'aaa');
INSERT INTO tbl1map(tbl1_id,body) VALUES(4,'ddd');

そして、INNER JOINを使ってUPDATEします。

UPDATE tbl1
  INNER JOIN tbl1map ON tbl1.id=tbl1map.tbl1_id
  SET tbl1.body=tbl1map.body;

これで、下記の様にまとめて更新されました。

mysql> SELECT * FROM tbl1;
+----+------+
| id | body |
+----+------+
|  1 | aaa  |
|  2 | 002  |
|  3 | 003  |
|  4 | ddd  |
|  5 | 005  |
|  6 | 006  |
+----+------+
101
101
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
101
101