如何在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中一个或多个列的值查找重复的行。