Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Gộp hai bảng với UNION trong MySQL?

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ểmUNIONUNION ALL
Trùng lặpLoại bỏGiữ lại
Hiệu năngChậm hơn (sort/unique)Nhanh hơn
Khi nào dùngCần dữ liệu uniqueBiế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;