MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで一致するIDを基に、あるテーブルから別のテーブルへ列の値をコピーする方法

MySQLでは、UPDATE文と複数テーブルの結合条件を組み合わせることで、あるテーブルの列の値を、IDが一致する別のテーブルへ簡単にコピーできます。この記事では、実際のサンプルコードとともに手順を詳しく解説します。

1. 最初のテーブルを作成する

まず、コピー元となるテーブル「DemoTable1」を作成します。

mysql> create table DemoTable1
(
    PersonId int,
    Value int
);
Query OK, 0 rows affected (0.64 sec)

2. テーブルにレコードを挿入する

INSERT文を使って、いくつかのレコードを追加します。

mysql> insert into DemoTable1 values(100,78);
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1 values(101,67);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1 values(102,89);
Query OK, 1 row affected (0.19 sec)

3. レコードを確認する

SELECT文で全レコードを表示して確認しましょう。

mysql> select *from DemoTable1;

実行結果は以下の通りです。

+----------+-------+
| PersonId | Value |
+----------+-------+
|      100 |    78 |
|      101 |    67 |
|      102 |    89 |
+----------+-------+
3 rows in set (0.00 sec)

4. 2つ目のテーブルを作成する

次に、コピー先となるテーブル「DemoTable2」を作成します。

mysql> create table DemoTable2
(
    StudentId int,
    StudentScore int
);
Query OK, 0 rows affected (0.57 sec)

ここでもINSERT文でレコードを追加します。StudentScore列にはNULLを設定しておきます。

mysql> insert into DemoTable2 values(100,NULL) ;
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable2 values(102,NULL);
Query OK, 1 row affected (0.22 sec)

SELECT文で確認すると、以下のようにNULLが含まれた状態になっています。

+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
|       100 |         NULL |
|       102 |         NULL |
+-----------+--------------+
2 rows in set (0.00 sec)

5. 一致するIDを基に列の値をコピーする

いよいよ本題です。次のクエリを実行すると、DemoTable2.StudentId と DemoTable1.PersonId が一致する行に対して、DemoTable1.Value の値が DemoTable2.StudentScore へコピーされます。

mysql> update DemoTable1, DemoTable2 set DemoTable2.StudentScore = DemoTable1.Value where DemoTable2.StudentId=DemoTable1.PersonId;
Query OK, 2 rows affected (0.13 sec)
Rows matched: 2 Changed: 2 Warnings: 0

ポイント解説

  • UPDATE文の後ろにカンマ区切りで複数のテーブル名を指定することで、複数テーブルを同時に扱えます(マルチテーブルUPDATE)。
  • WHERE句で両テーブルのID列を結合条件として指定し、一致する行のみを更新対象にしています。
  • DemoTable1のPersonId=101はDemoTable2に存在しないため、更新の対象外となります。

6. 更新結果を確認する

もう一度SELECT文を実行して、テーブルの中身を確認してみましょう。

mysql> select *from DemoTable2;

実行結果は以下の通りです。NULLだった StudentScore 列に、一致するIDの Value の値が正しくコピーされていることがわかります。

+-----------+--------------+
| StudentId | StudentScore |
+-----------+--------------+
|       100 |           78 |
|       102 |           89 |
+-----------+--------------+
2 rows in set (0.00 sec)

まとめ

このように、MySQLのマルチテーブルUPDATE構文を使えば、JOINのような感覚で、あるテーブルの列の値を別のテーブルの一致するIDの行へ効率的にコピーできます。大量データの一括更新にも対応できるため、実務でも頻繁に使われるテクニックですので、ぜひ覚えておきましょう。

  1. MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法

    あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82     -> (     

  2. MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)

    MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi