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 IGNOREhoặcON DUPLICATE KEY UPDATEthay 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;