Sử dụng CREATE TABLE ... SELECT ... UNION ... để gộp dữ liệu từ hai bảng có cấu trúc giống nhau vào một bảng mới.
Cú pháp
CREATE TABLE bảng_mới (
SELECT * FROM bảng_1
) UNION (
SELECT * FROM bảng_2
);
Ví dụ minh họa
Tạo 2 bảng cũ có cấu trúc giống nhau:
mysql> CREATE TABLE Old_TableDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName VARCHAR(20)
-> );
mysql> CREATE TABLE Old_TableDemo2 (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName VARCHAR(20)
-> );
Chèn dữ liệu vào bảng 1:
mysql> INSERT INTO Old_TableDemo(UserName) VALUES ('John'), ('Carol');
Chèn dữ liệu vào bảng 2:
mysql> INSERT INTO Old_TableDemo2(UserName) VALUES ('Larry'), ('Sam');
Tạo bảng mới gộp 2 bảng (UNION loại bỏ trùng lặp):
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
Kiểm tra bảng mới:
mysql> SELECT * FROM UserTableDemo;
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | | 2 | Carol | | 1 | Larry | | 2 | Sam | +--------+----------+
Lưu ý quan trọng
- UNION loại bỏ hàng trùng lặp (so sánh toàn bộ hàng)
- UNION ALL giữ tất cả hàng, bao gồm trùng lặp - nhanh hơn
- Cấu trúc cột của các SELECT phải khớp nhau (số cột, thứ tự, kiểu dữ liệu tương thích)
- Cột AUTO_INCREMENT trong bảng mới sẽ được gán lại từ 1
Ví dụ với UNION ALL
CREATE TABLE UserTableDemo2 (
SELECT * FROM Old_TableDemo
) UNION ALL (
SELECT * FROM Old_TableDemo2
);