สามารถคัดลอกข้อมูลจากตารางหนึ่งไปอีกตารางที่มีชื่อคอลัมน์/จำนวนคอลัมน์ต่างกันได้โดยใช้ INSERT INTO ... SELECT โดยระบุคอลัมน์ปลายทางและคอลัมน์ต้นทางให้ตรงกัน
Syntax
INSERT INTO target_table (col1, col2, col3) SELECT source_col1, source_col2, source_col3 FROM source_table;
ตัวอย่างการใช้งาน
1. สร้างตารางต้นทาง (DemoTable1900) มี AUTO_INCREMENT
mysql> create table DemoTable1900 (
-> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName varchar(20),
-> ClientAge int default 29
-> ) auto_increment=1000; Query OK, 0 rows affected (0.00 sec)
2. เพิ่มข้อมูลในตารางต้นทาง
mysql> insert into DemoTable1900(ClientName,ClientAge) values('Chris',45); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1900(ClientName,ClientAge) values('David',29); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1900(ClientName,ClientAge) values('Mike',37); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1900(ClientName) values('Sam'); Query OK, 1 row affected (0.00 sec) -- ใช้ Default Age=29
ข้อมูลต้นทาง:
mysql> select * from DemoTable1900;
+----------+------------+-----------+ | ClientId | ClientName | ClientAge | +----------+------------+-----------+ | 1000 | Chris | 45 | | 1001 | David | 29 | | 1002 | Mike | 37 | | 1003 | Sam | 29 | +----------+------------+-----------+ 4 rows in set (0.00 sec)
3. สร้างตารางปลายทาง (โครงสร้างต่าง)
mysql> create table DemoTable1901 ( EmployeeId int, EmployeeName varchar(20), EmployeeAge int ); Query OK, 0 rows affected (0.00 sec)
4. คัดลอกข้อมูล Map คอลัมน์
mysql> insert into DemoTable1901(EmployeeId,EmployeeName,EmployeeAge)
-> select ClientId,ClientName,ClientAge from DemoTable1900;
Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0
5. ตรวจสอบผลลัพธ์
mysql> select * from DemoTable1901;
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | 1000 | Chris | 45 | | 1001 | David | 29 | | 1002 | Mike | 37 | | 1003 | Sam | 29 | +------------+--------------+-------------+ 4 rows in set (0.00 sec)
กรณีพิเศษ: คอลัมน์ AUTO_INCREMENT ในปลายทาง
-- ถ้าตารางปลายทางมี AUTO_INCREMENT ให้ละคอลัมน์ ID ไป INSERT INTO DemoTable1901(EmployeeName,EmployeeAge) SELECT ClientName, ClientAge FROM DemoTable1900; -- EmployeeId จะ Auto Generate
คำสั่งที่เกี่ยวข้อง
-- คัดลอกโครงสร้าง + ข้อมูล (CREATE TABLE ... LIKE + INSERT) CREATE TABLE new_table LIKE old_table; INSERT INTO new_table SELECT * FROM old_table; -- คัดลอกเฉพาะโครงสร้าง CREATE TABLE new_table LIKE old_table;
สรุป: ใช้ INSERT INTO target(cols...) SELECT source_cols FROM source_table เพื่อคัดลอกข้อมูลระหว่างตารางโครงสร้างต่างกัน โดย Map คอลัมน์ตามลำดับที่ระบุ