INSERT INTO ... SELECT ... WHERE 컬럼 IS NOT NULL로 NULL이 아닌 행만 골라 다른 테이블에 삽입할 수 있습니다.
소스 테이블 생성 및 데이터
mysql> CREATE TABLE DemoTable1 (DueDate DATE);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO DemoTable1 VALUES('2019-09-10');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1 VALUES(NULL);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1 VALUES('2019-11-10');
Query OK, 1 row affected (0.00 sec)
소스 데이터
mysql> SELECT * FROM DemoTable1;
+------------+ | DueDate | +------------+ | 2019-09-10 | | NULL | | 2019-11-10 | +------------+ 3 rows in set (0.00 sec)
대상 테이블 생성
mysql> CREATE TABLE DemoTable2 (AdmissionDate DATE); Query OK, 0 rows affected (0.00 sec)
NULL 제외 복사
mysql> INSERT INTO DemoTable2(AdmissionDate)
-> SELECT DueDate FROM DemoTable1 WHERE DueDate IS NOT NULL;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
대상 테이블 확인
mysql> SELECT * FROM DemoTable2;
+---------------+ | AdmissionDate | +---------------+ | 2019-09-10 | | 2019-11-10 | +---------------+ 2 rows in set (0.00 sec)
핵심: WHERE DueDate IS NOT NULL로 NULL 행 제외. INSERT INTO ... SELECT는 컬럼 순서/타입 일치 필요. 대용량이면 CREATE TABLE DemoTable2 AS SELECT ...가 더 빠름(인덱스/제약은 별도 생성 필요).