Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 첫 번째 테이블의 최대 ID 값을 조회하여 다른 테이블의 모든 행에 삽입하는 방법

MySQL에서 INSERT INTO ... SELECT 문을 활용하면 한 테이블의 최대(MAX) ID 값을 구한 뒤, 그 값을 다른 테이블의 모든 행에 한 번에 삽입할 수 있습니다. 서브쿼리를 SELECT 절 안에 배치하면 원본 테이블의 각 행마다 동일한 최대 ID 값이 반복해서 들어가게 됩니다.

1. 첫 번째 테이블 생성

먼저 예제로 사용할 테이블을 생성합니다.

mysql> create table DemoTable1
(
    Id int,
    Name varchar(100)
);
Query OK, 0 rows affected (0.86 sec)

2. 샘플 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다.

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)

SELECT 문으로 저장된 전체 레코드를 확인합니다.

mysql> select *from DemoTable1;

실행 결과는 다음과 같습니다.

+------+--------+
| Id   | Name   |
+------+--------+
| 1001 | Chris  |
| 999  | Robert |
| 1003 | Mike   |
| 1002 | Sam    |
+------+--------+
4 rows in set (0.00 sec)

3. 두 번째 테이블 생성

데이터를 삽입할 대상 테이블을 만듭니다.

mysql> create table DemoTable2
(
    StudentId int,
    StudentFirstName varchar(100)
);
Query OK, 0 rows affected (1.15 sec)

4. INSERT INTO ... SELECT로 최대 ID 값 삽입

핵심 쿼리입니다. SELECT 절 안에 (select Max(Id) from DemoTable1)이라는 스칼라 서브쿼리를 넣으면, DemoTable1의 각 행(Name)과 함께 최대 ID 값(1003)이 DemoTable2의 StudentId 컬럼에 반복 삽입됩니다.

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

5. 결과 확인

DemoTable2의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable2;

모든 행의 StudentId에 첫 번째 테이블의 최대 ID 값인 1003이 동일하게 들어간 것을 확인할 수 있습니다.

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
|      1003 | Chris            |
|      1003 | Robert           |
|      1003 | Mike             |
|      1003 | Sam              |
+-----------+------------------+
4 rows in set (0.00 sec)

정리

이처럼 MySQL에서는 INSERT INTO ... SELECT 문과 MAX() 집계 함수를 조합하면 별도의 애플리케이션 로직 없이 단일 쿼리만으로 한 테이블의 최대 ID 값을 다른 테이블의 모든 행에 손쉽게 복사할 수 있습니다. 참고로 이 방식은 원본 테이블의 행 수만큼 대상 테이블에 레코드가 생성되며, 각 레코드에는 동일한 최대 ID 값이 저장된다는 점을 기억하시기 바랍니다.