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

【MySQL】INSERT INTO SELECT DISTINCTで別テーブルから重複のないレコードを挿入する方法

MySQLで別テーブルから重複のないレコードを挿入する方法

別のテーブルから複数の行を新しいテーブルへ挿入する際、重複するレコードを除外したいケースはよくあります。このような場合、INSERT INTO SELECT文にDISTINCTを組み合わせて使用することで、重複のない(一意の)レコードだけを挿入できます。

ここからは、実際のサンプルコードを使って手順を詳しく解説します。

手順1:元となるテーブルを作成する

まず、データのコピー元となるテーブルを作成しましょう。

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

手順2:テーブルにレコードを挿入する

insertコマンドを使って、テーブルに複数のレコードを挿入します。ここでは意図的に重複する値(50や10など)を含めています。

mysql> insert into DemoTable1 values(50);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1 values(10);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1 values(10);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1 values(60);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1 values(50);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1 values(70);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1 values(50);
Query OK, 1 row affected (0.14 sec)

手順3:テーブルの内容を確認する

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

mysql> select *from DemoTable1;

実行すると、次のような出力が得られます。

+-------+
| Value |
+-------+
|    50 |
|    10 |
|    10 |
|    60 |
|    50 |
|    70 |
|    50 |
+-------+
7 rows in set (0.00 sec)

このように、元のテーブルには7件のレコードが存在し、そのうち「50」が3件、「10」が2件と重複した値が含まれています。

手順4:挿入先のテーブルを作成する

次に、データの挿入先となる2番目のテーブルを作成します。

mysql> create table DemoTable2
(
    Marks int
);
Query OK, 0 rows affected (1.20 sec)

手順5:DISTINCTを使って重複のないレコードを挿入する

以下が、別のテーブルから重複を除外して複数行を挿入するためのクエリです。

mysql> insert into DemoTable2(Marks) select distinct Value from DemoTable1;
Query OK, 4 rows affected (0.18 sec)
Records: 4 Duplicates: 0 Warnings: 0

実行結果の「Records: 4」に注目してください。元のテーブルには7件のレコードがありましたが、DISTINCTによって重複が除外され、一意な値である4件だけが挿入されたことがわかります。

手順6:挿入結果を確認する

最後に、select文で挿入先テーブルの全レコードを表示して結果を確認します。

mysql> select *from DemoTable2;

実行すると、次のような出力が得られます。

+-------+
| Marks |
+-------+
|    50 |
|    10 |
|    60 |
|    70 |
+-------+
4 rows in set (0.00 sec)

重複していた「50」や「10」がそれぞれ1件だけになり、重複のない状態でデータが挿入されていることが確認できました。

まとめ

INSERT INTO SELECT文にDISTINCTキーワードを組み合わせることで、別テーブルから重複のないレコードだけを効率的に挿入できます。マスタデータの整理や一意な値リストの作成など、実務でも活用場面の多いテクニックなので、ぜひ覚えておきましょう。

  1. MySQLのINSERT INTO SELECT文で複数のテーブルからレコードを挿入する方法

    複数のテーブルからレコードを挿入するには、INSERT INTO ... SELECT 文を使用します。この記事では、2つのテーブルのデータを組み合わせて、別のテーブルへレコードを挿入する手順を、実際の実行例とともに解説します。 1つ目のテーブルを作成する まず、挿入元となる1つ目のテーブルを作成しましょう。 mysql> create table DemoTable1943 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) サンプルデータを挿入する INSERTコマンドを使って、テーブルにレコー

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

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