MySQL
Cách xóa bản ghi trùng trong MySQL
09/12/2023
Trong bài viết này mình sẽ hướng dẫn các bạn cách để xóa dữ liệu trùng lặp trong MySQL.
Bước 1: Chuẩn bị dữ liệu
Đoạn code dưới sẽ tạo bảng customers và thêm vào một vài dữ liệu để làm mẫu:
DROP TABLE IF EXISTS customers;
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL
);
INSERT INTO customers (first_name,last_name,email)
VALUES ('Carine ','Schmitt','carine.schmitt@verizon.net'),
('Jean','King','jean.king@me.com'),
('Peter','Ferguson','peter.ferguson@google.com'),
('Janine ','Labrune','janine.labrune@aol.com'),
('Jonas ','Bergulfsen','jonas.bergulfsen@mac.com'),
('Janine ','Labrune','janine.labrune@aol.com'),
('Susan','Nelson','susan.nelson@comcast.net'),
('Zbyszek ','Piestrzeniewicz','zbyszek.piestrzeniewicz@att.net'),
('Roland','Keitel','roland.keitel@yahoo.com'),
('Julie','Murphy','julie.murphy@yahoo.com'),
('Kwai','Lee','kwai.lee@google.com'),
('Jean','King','jean.king@me.com'),
('Susan','Nelson','susan.nelson@comcast.net'),
('Roland','Keitel','roland.keitel@yahoo.com');
Bước 2: Tìm dữ liệu trùng lặp email
SELECT
email, COUNT(email)
FROM
customers
GROUP BY
email
HAVING
COUNT(email) > 1;
Chúng ta có 4 kết quả trùng lặp
Sử dụng DELETE JOIN để xóa dữ liệu trùng
Truy vấn sau sẽ xóa các dữ liệu trùng và giữ lại dữ liệu có id lớn nhất:
DELETE t1 FROM customers t1
INNER JOIN
customers t2
WHERE
t1.id < t2.id AND t1.email = t2.email;
Kết quả:
Query OK, 4 rows affected (0.10 sec)
Bây giờ chúng ta thử tìm lại các email trùng lặp:
SELECT
email,
COUNT(email)
FROM
customers
GROUP BY
email
HAVING
COUNT(email) > 1;
Kết quả trả về rỗng, như vậy không có dữ liệu trùng lặp email
Kiểm tra lại lần nữa:
SELECT * FROM customers;
Các rows với id 2, 4, 7, và 9 đã được xóa.
Trong trường hợp khi xóa dữ liệu trùng mà vẫn muốn giữ lại id bé nhất thì sử dụng query sau:
DELETE t1 FROM customers t1
INNER JOIN
customers t2
WHERE
t1.id > t2.id AND t1.email = t2.email;
Các bạn có thể thử nghiệm và xem kết quả nhé
Bài viết liên quan
09:36 . 14/01/2024
22:38 . 10/01/2024
22:38 . 30/12/2023
22:33 . 30/12/2023
22:30 . 30/12/2023
22:10 . 30/12/2023
22:03 . 30/12/2023
09:01 . 30/12/2023
08:52 . 30/12/2023