Gộp (merge) hai bảng bằng CREATE TABLE ... SELECT ... UNION
Tạo bảng mới chứa dữ liệu từ 2 bảng cùng cấu trúc, dùng UNION để loại trùng lặp (hoặc UNION ALL để giữ trùng).
Cú pháp
CREATE TABLE newTable AS SELECT * FROM table1 UNION SELECT * FROM table2;
Ví dụ: Gộp FirstTable và SecondTable
Tạo FirstTable:
mysql> CREATE TABLE FirstTable (Id INT, PersonName VARCHAR(20)); mysql> INSERT INTO FirstTable VALUES (10, 'Larry'), (20, 'David');
Tạo SecondTable:
mysql> CREATE TABLE SecondTable (Id INT, PersonName VARCHAR(20)); mysql> INSERT INTO SecondTable VALUES (30, 'Chris'), (40, 'Robert');
Gộp với UNION:
mysql> CREATE TABLE MergeBothTableDemo SELECT * FROM FirstTable UNION SELECT * FROM SecondTable; Query OK, 4 rows affected
Kết quả bảng mới:
+------+------------+ | Id | PersonName | +------+------------+ | 10 | Larry | | 20 | David | | 30 | Chris | | 40 | Robert | +------+------------+
UNION vs UNION ALL
| Đặc điểm | UNION | UNION ALL |
|---|---|---|
| Trùng lặp | Loại bỏ | Giữ lại |
| Hiệu năng | Chậm hơn (sort/unique) | Nhanh hơn |
| Khi nào dùng | Cần dữ liệu unique | Biết chắc không trùng, hoặc muốn giữ trùng |
Yêu cầu cấu trúc
- Số cột giống nhau
- Kiểu dữ liệu tương thích (position-based)
- Tên cột lấy từ SELECT đầu tiên
Mở rộng: Gộp nhiều bảng
CREATE TABLE merged AS SELECT * FROM t1 UNION ALL SELECT * FROM t2 UNION ALL SELECT * FROM t3 UNION ALL SELECT * FROM t4;
Lưu ý
- Không copy index, PK, FK, AUTO_INCREMENT, trigger
- Cần thêm index/PK thủ công sau khi tạo
- Để copy cấu trúc:
CREATE TABLE new LIKE old; INSERT INTO new SELECT * FROM old;