【MySQL】INSERT INTO SELECTで最初のテーブルの最大ID値を取得し、別のテーブルの全行に挿入する方法
この記事では、MySQLのINSERT INTO ... SELECT文とMAX()関数を組み合わせて、最初のテーブルから最大ID値を取得し、その値を別のテーブルのすべての行に一括挿入する方法を、実際のSQLサンプルとともに解説します。
手順1:最初のテーブルを作成する
まず、サンプル用のテーブル「DemoTable1」を作成しましょう。
mysql> create table DemoTable1
(
Id int,
Name varchar(100)
);
Query OK, 0 rows affected (0.86 sec)
手順2:insertコマンドでレコードを挿入する
insertコマンドを使用して、DemoTable1に複数のレコードを挿入します。
mysql> insert into DemoTable1 values(1001,'Chris'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1 values(999,'Robert'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable1 values(1003,'Mike'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable1 values(1002,'Sam'); Query OK, 1 row affected (0.13 sec)
手順3:テーブルの中身を確認する
select文で、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable1;
実行結果は以下の通りです。
+------+--------+ | Id | Name | +------+--------+ | 1001 | Chris | | 999 | Robert | | 1003 | Mike | | 1002 | Sam | +------+--------+ 4 rows in set (0.00 sec)
この時点での最大ID値は「1003」であることが確認できます。
手順4:2つ目のテーブルを作成する
次に、挿入先となる2つ目のテーブル「DemoTable2」を作成します。
mysql> create table DemoTable2
(
StudentId int,
StudentFirstName varchar(100)
);
Query OK, 0 rows affected (1.15 sec)
手順5:最大ID値をサブクエリで取得して一括挿入する
ここがこの記事のポイントです。INSERT INTO ... SELECT文の中でサブクエリとして(select Max(Id) from DemoTable1)を記述することで、最初のテーブルの最大ID値を取得できます。これをDemoTable2のStudentId列に、DemoTable1のNameデータとセットで挿入します。
mysql> insert into DemoTable2(StudentId,StudentFirstName) select (select Max(Id) from DemoTable1), Name from DemoTable1; Query OK, 4 rows affected (0.20 sec) Records: 4 Duplicates: 0 Warnings: 0
このように書くことで、SELECTされた各行(この例では4行)すべてに対して、最大ID値「1003」が同じく挿入されます。
手順6:挿入結果を確認する
select文で、DemoTable2の全レコードを表示して結果を確認しましょう。
mysql> select *from DemoTable2;
実行結果は以下の通りです。
+-----------+------------------+ | StudentId | StudentFirstName | +-----------+------------------+ | 1003 | Chris | | 1003 | Robert | | 1003 | Mike | | 1003 | Sam | +-----------+------------------+ 4 rows in set (0.00 sec)
まとめ
INSERT INTO ... SELECT文のSELECT句内でMAX()関数によるサブクエリを利用すれば、あるテーブルの最大ID値を簡単に取得し、別のテーブルの全行に共通の値として一括挿入することができます。レコード数が多くても1回のSQLで処理できるため、アプリケーション側でループ処理を書く必要がなく、効率的なデータ操作が可能になります。
-
MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法
はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036 
-
MySQLで列から最大値を取得する方法
MySQLで列の最大値を取得するには?MySQLのテーブルから特定の列の最大値を取得するには、ORDER BY句とLIMIT句を組み合わせる方法が便利です。ここでは、実際にテーブルを作成し、データを挿入して、最大値を取得する手順を順番に解説します。1. テーブルを作成するまず、以下のコマンドでサンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Value int -> ); Query OK, 0 rows affected (0.63 sec)2. レコードを挿入する次に、INSERTコ