How To Find Duplicate Values in MySQL

摘要:在本教程中,您将学习如何查找 MySQL 中一列或多列的重复值。

数据重复发生的原因有很多。查找重复值是使用数据库时必须处理的重要任务之一。

设置样本表

首先,创建一个名为contacts的表,其中包含四列: idfirst_namelast_nameemail

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_namelast_nameemail列中具有重复的值。让我们学习如何找到它们。

查找一列中的重复值

要在表的一列中查找重复值,请按照以下步骤操作:

  1. 首先,使用GROUP BY子句按目标列(即要检查重复项的列)对所有行进行分组。
  2. 然后,在HAVING子句中使用COUNT()函数检查是否有任何组包含超过 1 个元素。这些组是重复的。

以下查询说明了这个想法:

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)

下图显示了显示重复电子邮件的查询的输出:

MySQL find duplicate values example

查找多列中的重复值

有时,您希望根据多列而不是一列查找重复行。在这种情况下,您可以使用以下查询:

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_namelast_nameemail列中具有重复值的行,请使用以下查询:

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 find duplicate values on multiple columns

在本教程中,您学习了如何根据 MySQL 中一列或多列的值查找重复行。

本教程有帮助吗?