摘要:在本教程中,您将学习如何查找 MySQL 中一列或多列的重复值。
数据重复发生的原因有很多。查找重复值是使用数据库时必须处理的重要任务之一。
设置样本表
首先,创建一个名为contacts
的表,其中包含四列: id
、 first_name
、 last_name
和email
。
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
);
Code language: SQL (Structured Query Language) (sql)
其次,将行插入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)
三、从contacts表中查询数据:
SELECT * FROM contacts
ORDER BY email;
Code language: SQL (Structured Query Language) (sql)
在contacts
表中,我们有一些行在first_name
、 last_name
和email
列中具有重复的值。让我们学习如何找到它们。
查找一列中的重复值
要在表的一列中查找重复值,请按照以下步骤操作:
以下查询说明了这个想法:
SELECT
col,
COUNT(col)
FROM
table_name
GROUP BY col
HAVING COUNT(col) > 1;
Code language: SQL (Structured Query Language) (sql)
通过使用此查询模板,您可以在contacts
表中查找具有重复电子邮件的行,如下所示:
SELECT
email,
COUNT(email)
FROM
contacts
GROUP BY email
HAVING COUNT(email) > 1;
Code language: SQL (Structured Query Language) (sql)
下图显示了显示重复电子邮件的查询的输出:
查找多列中的重复值
有时,您希望根据多列而不是一列查找重复行。在这种情况下,您可以使用以下查询:
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)
仅当列的组合重复时,行才被视为重复,因此我们在HAVING
子句中使用AND
运算符。
例如,要查找contacts
表中的first_name
、 last_name
和email
列中具有重复值的行,请使用以下查询:
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;
Code language: SQL (Structured Query Language) (sql)
下图说明了查询的输出:
在本教程中,您学习了如何根据 MySQL 中一列或多列的值查找重复行。
本教程有帮助吗?