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

【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で処理できるため、アプリケーション側でループ処理を書く必要がなく、効率的なデータ操作が可能になります。

  1. MySQLで列の値から先頭の1文字を取り出し、別の列に挿入する方法

    はじめにMySQLである列(カラム)の値から先頭の1文字を取り出し、それを別の列に格納したい場合があります。このようなときに便利なのが LEFT() 関数です。LEFT() 関数は、文字列の左端から指定した文字数だけを抽出することができます。ここでは、実際にテーブルを作成しながら、その手順を順番に解説していきます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstLetter」(先頭文字を格納する列)と「Title」(元となる文字列の列)の2つの列を持つテーブルを定義します。mysql> create table DemoTable2036 

  2. MySQLで列から最大値を取得する方法

    MySQLで列の最大値を取得するには?MySQLのテーブルから特定の列の最大値を取得するには、ORDER BY句とLIMIT句を組み合わせる方法が便利です。ここでは、実際にテーブルを作成し、データを挿入して、最大値を取得する手順を順番に解説します。1. テーブルを作成するまず、以下のコマンドでサンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Value int -> ); Query OK, 0 rows affected (0.63 sec)2. レコードを挿入する次に、INSERTコ