如何在MySQL中查找重复值
时间:2019-11-20 08:52:30 来源:igfitidea点击:
简介:在本教程中,您将学习如何在MySQL中查找一个或多个列的重复值。
发生数据重复的原因很多。
查找重复值是使用数据库时必须处理的重要任务之一。
设置样本表
首先,创建一个名为contact的表,该表有四列: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
);
其次,将行插入联系人表:
INSERT INTO contacts (first_name,last_name,email)
VALUES ('Carine ','Schmitt','[email protected]'),
('Jean','King','[email protected]'),
('Peter','Ferguson','[email protected]'),
('Janine ','Labrune','[email protected]'),
('Jonas ','Bergulfsen','[email protected]'),
('Janine ','Labrune','[email protected]'),
('Susan','Nelson','[email protected]'),
('Zbyszek ','Piestrzeniewicz','[email protected]'),
('Roland','Keitel','[email protected]'),
('Julie','Murphy','[email protected]'),
('Kwai','Lee','[email protected]'),
('Jean','King','[email protected]'),
('Susan','Nelson','[email protected]'),
('Roland','Keitel','[email protected]');
第三,从联系人表中查询数据:
SELECT * FROM contacts ORDER BY email;
在联系人表中,我们有一些行在first_name,last_name和email列中具有重复的值。
让我们学习如何找到它们。
在一列中查找重复的值
在表的一列中查找重复的值,您可以使用以下步骤:
首先,使用GROUP BY子句按目标列对所有行进行分组,目标列是您要检查重复项的列。
然后,在HAVING子句中使用COUNT()函数来检查是否任何组的元素数都超过1。
这些组是重复的。
以下查询说明了此想法:
SELECT
col,
COUNT(col)
FROM
table_name
GROUP BY col
HAVING COUNT(col) > 1;
通过使用此查询模板,您可以在联系人表中查找包含重复电子邮件的行,如下所示:
SELECT
email,
COUNT(email)
FROM
contacts
GROUP BY email
HAVING COUNT(email) > 1;
此图显示查询的输出,该查询显示重复的电子邮件:
在多列中查找重复值
有时,您希望基于多个列而不是一个列来查找重复的行。
在这种情况下,可以使用以下查询:
SELECT
col1, COUNT(col1),
col2, COUNT(col2),
...
FROM
table_name
GROUP BY
col1,
col2, ...
HAVING
(COUNT(col1) > 1) AND
(COUNT(col2) > 1) AND
...
仅当列的组合重复时才将行视为重复,因此我们在HAVING子句中使用AND运算符。
例如,要在联系人表中查找在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;
下面说明了查询的输出:
在本教程中,您学习了如何根据MySQL中一个或多个列的值查找重复的行。

