Bạn có thể thực hiện việc này khá dễ dàng bằng cách chọn truy vấn đó vào một bảng khác, sau đó đổi tên nó để thay thế cho bảng gốc.
CREATE TABLE `table2` (
`name` varchar(255),
`email` varchar(255),
UNIQUE KEY `email` (`email`));
INSERT INTO `table2` SELECT `name`, DISTINCT(`email`) FROM `table`;
RENAME TABLE `table` TO `table1`;
RENAME TABLE `table2` TO `table`;
Lưu ý rằng CREATE
này nên được điều chỉnh theo định dạng bảng thực tế của bạn. Tôi đã thêm khóa duy nhất vào trường email như một gợi ý về cách bạn sẽ ngăn chặn các bản sao ngay từ đầu.
Ngoài ra, bạn có thể lặp lại điều này
DELETE FROM `table`
WHERE `email` IN (
SELECT `email` FROM `table` GROUP BY `email` HAVING count(*) > 1
) LIMIT 1
Điều này sẽ xóa một bản ghi trùng lặp cho mỗi cuộc gọi. Tầm quan trọng của giới hạn là không loại bỏ cả hai hàng đối với bất kỳ bản sao nào