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

MySQL에서 다른 테이블의 데이터를 중복 없이 여러 행으로 삽입하는 방법

다른 테이블의 데이터를 새 테이블로 복사할 때 중복된 값을 제거하고 고유한(distinct) 레코드만 삽입해야 하는 경우가 있습니다. 이럴 때 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. 두 번째 테이블 생성

이제 데이터를 삽입할 두 번째 테이블을 생성합니다.

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

5. DISTINCT를 사용해 중복 없이 여러 행 삽입

다음 쿼리는 다른 테이블에서 여러 행을 가져와 삽입하되, 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

실행 결과를 보면 원본 테이블의 7개 행 중 중복이 제거된 4개의 고유한 값만 삽입된 것을 확인할 수 있습니다.

6. 최종 결과 확인

SELECT 문으로 두 번째 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable2;

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

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

정리

이처럼 INSERT INTO ... SELECT DISTINCT 구문을 활용하면 한 테이블에서 다른 테이블로 데이터를 복사할 때 자동으로 중복을 제거하고 고유한 레코드만 삽입할 수 있습니다. 대량의 데이터를 마이그레이션하거나 테이블 정규화 작업을 진행할 때 특히 유용하게 활용할 수 있는 기법입니다.