Bản tóm tắt. trong hướng dẫn này, bạn sẽ học cách tìm các giá trị trùng lặp của một hoặc nhiều cột trong MySQL
Sao chép dữ liệu xảy ra vì nhiều lý do. Tìm các giá trị trùng lặp là một trong những nhiệm vụ quan trọng mà bạn phải xử lý khi làm việc với cơ sở dữ liệu
Thiết lập một bảng mẫu
Đầu tiên, tạo một bảng tên là contacts
với bốn cột. id
, first_name
,
0 vàCode language: SQL [Structured Query Language] [sql]
INSERT INTO contacts [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'];
1Code language: SQL [Structured Query Language] [sql]
INSERT INTO contacts [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'];
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE contacts [ id INT PRIMARY KEY AUTO_INCREMENT, first_name VARCHAR[50] NOT NULL, last_name VARCHAR[50] NOT NULL, email VARCHAR[255] NOT NULL ];
Thứ hai, chèn các hàng vào bảng contacts
INSERT INTO contacts [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'];
Code language: SQL [Structured Query Language] [sql]
Thứ ba, truy vấn dữ liệu từ bảng liên hệ
Code language: SQL [Structured Query Language] [sql]
SELECT * FROM contacts ORDER BY email;
Trong bảng contacts
, chúng tôi có một số hàng có các giá trị trùng lặp trong các cột first_name
,
0 vàCode language: SQL [Structured Query Language] [sql]
INSERT INTO contacts [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'];
1. Hãy học cách tìm chúngCode language: SQL [Structured Query Language] [sql]
INSERT INTO contacts [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'];
Tìm các giá trị trùng lặp trong một cột
Việc tìm các giá trị trùng lặp trong một cột của bảng, bạn sử dụng theo các bước sau
- Đầu tiên, sử dụng mệnh đề
7 để nhóm tất cả các hàng theo cột mục tiêu, là cột mà bạn muốn kiểm tra trùng lặp
Code language: SQL [Structured Query Language] [sql]INSERT INTO contacts [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'];
- Sau đó, dùng hàm
8 trong mệnh đềINSERT INTO contacts [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'];
9 để kiểm tra xem có nhóm nào có nhiều hơn 1 phần tử không. Các nhóm này trùng lặp
Code language: SQL [Structured Query Language] [sql]INSERT INTO contacts [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'];
Truy vấn sau đây minh họa ý tưởng
Code language: SQL [Structured Query Language] [sql]
SELECT col, COUNT[col] FROM table_name GROUP BY col HAVING COUNT[col] > 1;
Bằng cách sử dụng mẫu truy vấn này, bạn có thể tìm các hàng có email trùng lặp trong bảng contacts
như sau
Code language: SQL [Structured Query Language] [sql]
SELECT email, COUNT[email] FROM contacts GROUP BY email HAVING COUNT[email] > 1;
Ảnh này hiển thị đầu ra của truy vấn hiển thị các email trùng lặp
Tìm các giá trị trùng lặp trong nhiều cột
Đôi khi, bạn muốn tìm các hàng trùng lặp dựa trên nhiều cột thay vì một. Trong trường hợp này, bạn có thể sử dụng truy vấn sau
SELECT col1, COUNT[col1], col2, COUNT[col2], ... FROM table_name GROUP BY col1, col2, ... HAVING [COUNT[col1] > 1] AND [COUNT[col2] > 1] AND ...
Code language: SQL [Structured Query Language] [sql]
Các hàng chỉ được coi là trùng lặp khi tổ hợp các cột trùng lặp, do đó chúng tôi đã sử dụng toán tử
1 trong mệnh đềCode language: SQL [Structured Query Language] [sql]
SELECT * FROM contacts ORDER BY email;
9Code language: SQL [Structured Query Language] [sql]
INSERT INTO contacts [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'];
Ví dụ: để tìm các hàng trong bảng contacts
có các giá trị trùng lặp trong cột first_name
,
0 vàCode language: SQL [Structured Query Language] [sql]
INSERT INTO contacts [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'];
1, bạn sử dụng truy vấn sauCode language: SQL [Structured Query Language] [sql]
INSERT INTO contacts [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'];
Code language: SQL [Structured Query Language] [sql]
SELECT first_name, COUNT[first_name], last_name, COUNT[last_name], email, COUNT[email] FROM contacts GROUP BY first_name , last_name , email HAVING COUNT[first_name] > 1 AND COUNT[last_name] > 1 AND COUNT[email] > 1;
Sau đây minh họa đầu ra của truy vấn
Trong hướng dẫn này, bạn đã học cách tìm các hàng trùng lặp dựa trên giá trị của một hoặc nhiều cột trong MySQL