แนวคิด
ใช้ CREATE TABLE ... AS SELECT ... UNION SELECT ... เพื่อสร้างตารางใหม่จากข้อมูลรวมของ 2 ตาราง (ลบแถวซ้ำออกอัตโนมัติ)
รูปแบบคำสั่ง
CREATE TABLE new_table AS (SELECT * FROM table1) UNION (SELECT * FROM table2);
ตัวอย่างขั้นตอนต่อขั้นตอน
1. สร้างตารางแรก
mysql> create table Old_TableDemo
-> (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(20)
-> );
Query OK, 0 rows affected (0.63 sec)
2. สร้างตารางที่สอง (โครงสร้างเหมือนกัน)
mysql> create table Old_TableDemo2
-> (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(20)
-> );
Query OK, 0 rows affected (0.60 sec)
3. เพิ่มข้อมูลตารางแรก
mysql> insert into Old_TableDemo(UserName) values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into Old_TableDemo(UserName) values('Carol');
Query OK, 1 row affected (0.15 sec)
mysql> select * from Old_TableDemo;
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | | 2 | Carol | +--------+----------+
4. เพิ่มข้อมูลตารางที่สอง
mysql> insert into Old_TableDemo2(UserName) values('Larry');
Query OK, 1 row affected (0.22 sec)
mysql> insert into Old_TableDemo2(UserName) values('Sam');
Query OK, 1 row affected (0.10 sec)
mysql> select * from Old_TableDemo2;
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | Larry | | 2 | Sam | +--------+----------+
5. สร้างตารางใหม่จาก UNION
mysql> create table UserTableDemo
-> (
-> select * from Old_TableDemo
-> )
-> UNION
-> (
-> select * from Old_TableDemo2
-> );
Query OK, 4 rows affected (1.18 sec) Records: 4 Duplicates: 0 Warnings: 0
6. ตรวจสอบตารางใหม่
mysql> select * from UserTableDemo;
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | | 2 | Carol | | 1 | Larry | | 2 | Sam | +--------+----------+
ข้อสังเกตสำคัญ
- UNION ลบแถวซ้ำ (duplicate rows) ออกอัตโนมัติ
- UNION ALL เก็บแถวซ้ำไว้ทั้งหมด (เร็วกว่า)
- โครงสร้างคอลัมน์ของทั้ง 2 ตารางต้อง เหมือนกันทุกประการ (จำนวน ชื่อ ชนิดข้อมูล ลำดับ)
- คอลัมน์ AUTO_INCREMENT จะไม่คงค่าเดิม (UserId 1,2,1,2) - อาจต้อง reset หรือเพิ่มคอลัมน์ใหม่
กรณีต้องการเก็บแถวซ้ำ (ใช้ UNION ALL)
CREATE TABLE new_table AS SELECT * FROM table1 UNION ALL SELECT * FROM table2;