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

INSERT INTO SELECT DISTINCT: Chèn dữ liệu không trùng lặp từ bảng khác trong MySQL


Giới thiệu

Dùng INSERT INTO ... SELECT DISTINCT ... để chèn các giá trị duy nhất từ bảng nguồn sang bảng đích, loại bỏ trùng lặp.

Ví dụ minh họa

Tạo bảng nguồn DemoTable1 (có trùng)

mysql> CREATE TABLE DemoTable1 (Value INT);
mysql> INSERT INTO DemoTable1 VALUES (50), (10), (10), (60), (50), (70), (50);

Xem dữ liệu nguồn

mysql> SELECT * FROM DemoTable1;
+-------+
| Value |
+-------+
| 50    |
| 10    |
| 10    |
| 60    |
| 50    |
| 70    |
| 50    |
+-------+

Tạo bảng đích DemoTable2

mysql> CREATE TABLE DemoTable2 (Marks INT);

Chèn distinct từ bảng 1 sang bảng 2

mysql> INSERT INTO DemoTable2 (Marks) 
SELECT DISTINCT Value FROM DemoTable1;
Query OK, 4 rows affected (0.18 sec)
Records: 4  Duplicates: 0  Warnings: 0

Kết quả bảng đích

mysql> SELECT * FROM DemoTable2;
+-------+
| Marks |
+-------+
| 50    |
| 10    |
| 60    |
| 70    |
+-------+

Lưu ý

  • DISTINCT áp dụng cho toàn bộ hàng SELECT (nếu SELECT nhiều cột).
  • Nếu bảng đích có UNIQUE constraint/PK, có thể dùng INSERT IGNORE hoặc ON DUPLICATE KEY UPDATE thay vì DISTINCT ở nguồn.
  • INSERT IGNORE INTO DemoTable2 SELECT Value FROM DemoTable1: Bỏ qua lỗi trùng key.

Mở rộng: Chèn từ nhiều bảng

INSERT INTO target (col)
SELECT DISTINCT col FROM table1
UNION
SELECT DISTINCT col FROM table2;