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 语句 来验证记录:

MySQL 查找重复记录

在这个表中,我们可以看到有许多带有重复值的行。让我们学习如何使用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;

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

MySQL 查找重复记录

查找多列中的重复数据

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

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表中找到包含 姓名、州电子邮件列 重复值的行,则可以使用以下查询:

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;

执行完上面的语句后,我们将得到下面的输出,显示了重复的姓名、州和电子邮件列:

MySQL 查找重复记录

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程