MySQL - 查找重复记录

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@learnfk.com'),
('Carine', 'Texas', 'carine@learnfk.com'),
('Peter', 'New York', 'peter@learnfk.com'),
('Janine ', 'Florida', 'janine@learnfk.com'),
('Janine ', 'Florida', 'janine@learnfk.com'),
('Jonas ', 'Atlanta', 'jonas@learnfk.com'),
('Jean', 'California', 'jean@learnfk.com'),
('Jean', 'California', 'jean@learnfk.com'),
('Mark ', 'Florida', 'mark@learnfk.com'),
('Roland', 'Alabama', 'roland@learnfk.com'),
('Roland', 'Alabama', 'roland@learnfk.com'),
('Julie', 'Texas', 'julie@learnfk.com'),
('Shane', 'New York', 'shane@learnfk.com'),
('Susan', 'Arizona', 'susan@learnfk.com'),
('Susan', 'Arizona', 'susan@learnfk.com');

执行 SELECT 语句以验证记录:

MySQL Find Duplicate Records

在此表中,无涯教程可以看到存在具有重复值的各种行。

在单列中查找重复数据

无涯教程可以使用以下步骤在表中找到重复的条目:

  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 Find Duplicate Records

在多列中查找重复数据

有时无涯教程需要根据多个列查找重复的值。在这种情况下,可以使用如下语法:

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列中包含重复值的行,则可以使用以下查询:

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 Find Duplicate Records

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

趣谈网络协议 -〔刘超〕

全栈工程师修炼指南 -〔熊燚(四火)〕

接口测试入门课 -〔陈磊〕

检索技术核心20讲 -〔陈东〕

物联网开发实战 -〔郭朝斌〕

实用密码学 -〔范学雷〕

体验设计案例课 -〔炒炒〕

Spark性能调优实战 -〔吴磊〕

结构执行力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)