MySQL 查找重复记录

一、MySQL 查找重复记录 介绍

MySQL 是一种数据库应用程序,它以行和列的形式将数据存储在表中。该数据库应用程序可以在表中存储重复记录,这会影响 MySQL 中数据库的性能。但是,由于各种原因会发生数据重复,在 MySQL 中使用数据库时,查找表中的重复值是一项重要任务。

通常,最好始终在表上使用唯一约束来存储防止重复行的数据。但是,有时在使用数据库时,由于人为错误、来自外部源的未清理数据或应用程序中的错误,我们会发现许多重复的行。在本文中,我们将学习如何在MySQL数据库中查找重复值。

让我们借助一个例子来理解它。首先,我们将使用以下语句创建一个名为“ student_contacts ”的表:

CREATE TABLE student_contacts (  
    id INT PRIMARY KEY AUTO_INCREMENT,  
    name VARCHAR(50) NOT NULL,  
    state VARCHAR(50) NOT NULL,  
    email VARCHAR(255) NOT NULL  
); 

接下来,我们将使用INSERT语句将记录填充到表中,如下所示:

INSERT INTO student_contacts (name, state, email)   
VALUES ('Carine', 'Texas', 'carine@javatpoint.com'),  
('Carine', 'Texas', 'carine@javatpoint.com'),  
('Peter', 'New York', 'peter@javatpoint.com'),  
('Janine ', 'Florida', 'janine@javatpoint.com'),  
('Janine ', 'Florida', 'janine@javatpoint.com'),  
('Jonas ', 'Atlanta', 'jonas@javatpoint.com'),  
('Jean', 'California', 'jean@javatpoint.com'),  
('Jean', 'California', 'jean@javatpoint.com'),  
('Mark ', 'Florida', 'mark@javatpoint.com'),  
('Roland', 'Alabama', 'roland@javatpoint.com'),  
('Roland', 'Alabama', 'roland@javatpoint.com'),  
('Julie', 'Texas', 'julie@javatpoint.com'),  
('Shane', 'New York', 'shane@javatpoint.com'),  
('Susan', 'Arizona', 'susan@javatpoint.com'),  
('Susan', 'Arizona', 'susan@javatpoint.com'); 

执行SELECT语句来验证记录:

在此表中,我们可以看到有不同的行具有重复值。让我们学习如何使用SQL查询找到它们。

二、在单列中查找重复数据

我们可以使用以下步骤在表中找到重复的条目:

  1. 首先,我们将使用GROUP BY子句根据所需列对所有行进行分组。所需的列是我们检查重复记录所基于的列。
  2. 其次,我们将在HAVING子句中使用COUNT()函数来检查具有多个元素的组。

以下语法解释了上述步骤:

SELECT column, COUNT(column)  
FROM table_name  
GROUP BY column  
HAVING COUNT(column) > 1; 

借助上述语法,我们可以使用以下语句在 student_contacts 表中查找具有重复名称的行:

SELECT name, email, COUNT(name)  
FROM student_contacts  
GROUP BY name  
HAVING COUNT(name) > 1;  

执行上述语句后,我们将获得以下显示重复名称和电子邮件的输出:

三、在多列中查找重复数据

有时我们需要根据多列查找重复值。在这种情况下,我们可以使用如下语法:

SELECT   
    column1, COUNT(column1),  
    column2, COUNT(column2),……  
FROM table_name  
GROUP BY column1, column2, .......  
HAVING   
       (COUNT(column1) > 1) AND   
       (COUNT(column2) > 1) AND …....  

我们应该注意,虽然在多个列中查找重复项,但只有在列组合重复时才会重复行。因此,我们需要在HAVING子句中使用AND运算符。

例如,如果我们想在 student_contacts 表中查找name、state和email 列中包含重复值的行,可以使用以下SQL:

SELECT   
    name, COUNT(name),  
    state, COUNT(state),  
    email, COUNT(email)  
FROM student_contacts  
GROUP BY name, state, email  
HAVING  COUNT(name) > 1  
    AND COUNT(state) > 1  
    AND COUNT(email) > 1;  

执行上述语句后,我们将获得以下输出,其中显示了重复的名称、状态和电子邮件列:

热门文章

优秀文章