SQL

MySQL 특정 테이블의 레코드를 다른 테이블로 복사하기

softPattern 2024. 1. 8. 18:02

참고

https://dev.mysql.com/doc/refman/8.0/en/insert-select.html

 

MySQL :: MySQL 8.0 Reference Manual :: 13.2.7.1 INSERT ... SELECT Statement

13.2.7.1 INSERT ... SELECT Statement INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name [, partition_name] ...)] [(col_name [, col_name] ...)] { SELECT ... | TABLE table_name | VALUES row_constructor_list } [ON DUPLI

dev.mysql.com


A테이블의 (특정 칼럼)레코드를 B테이블 (특정 칼럼)로 복사하기

개발중에 특정 테이블에서, 데이터들이 속성에 따라 분리되지 않았거나, 다대다 관계가 성립하는 것이 발견되었다.

 

따라서 해당 테이블의 정규화 과정을 거쳤고, 기존에 저장되어 있던 데이터 레코드들을 새로 만든 매핑테이블에 복사를 해야했다.

 

그래서 관련 쿼리를 찾아보았고 다음 쿼리는 MySQL 공식 documentation에 명시된 SQL Statement이다.

 

아래를 참고하여 원하는 A테이블의 특정 레코드들을 B테이블로 복사하기가 가능하다. 

멍청하게 하나씩 카피 떠야하는 건가 아주 잠시 생각도 하긴 해봤다.. 

 

INSERT INTO tbl_temp2 (fld_id)
  SELECT tbl_temp1.fld_order_id
  FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;

 

 

위 쿼리를 참고하여 내가 사용한 쿼리 예시는 다음과 같다.

 

INSERT INTO ATables (user_key, campaign_key, time_invited, time_added, is_invited, is_added) 
SELECT user_key, campaign_key, time_invited, time_added, is_invited, is_added 
FROM BTables 
WHERE role_key = 'xx' AND campaign_key is not null;

 

이렇게 하면 BTables에 존재하는 조건에 해당되는 5개 칼럼의 레코드들을

 

ATables의 내가 지정한 5개의 칼럼에 레코드로 Insert가 가능하다. 

 

참고로, ATables에 PK로 Auto Increments 컬럼이 잡혀있어도 위 쿼리를 실행하면 자동으로 AI도 입력된다.