Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

สร้างตารางใหม่จากการรวม 2 ตารางด้วย UNION ใน MySQL


แนวคิด

ใช้ 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;