【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キーワードを組み合わせることで、別テーブルから重複のないレコードだけを効率的に挿入できます。マスタデータの整理や一意な値リストの作成など、実務でも活用場面の多いテクニックなので、ぜひ覚えておきましょう。
-
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コマンドを使って、テーブルにレコー
-
MySQLであるテーブルから別のテーブルへデータを挿入する方法(INSERT INTO SELECT)
MySQLであるテーブルから別のテーブルへデータをコピーして挿入したい場合は、INSERT INTO ... SELECT 文を使用します。この記事では、実際にテーブルを作成し、データを別テーブルへ移す手順をサンプルコードと実行結果とともにわかりやすく解説します。 1. 元となるテーブルを作成する まず、コピー元となるテーブル「DemoTable1」を作成します。カラムは Id(int型)と FirstName(varchar型)の2つです。 mysql> create table DemoTable1 -> ( -> Id int, -> Fi