Mysql: 搜索重复数据, 搜索重复值, 删除重复的行,How To Find Duplicate Values in MySQL,How To Delete Duplicate Rows in MySQL

 

如何在MySQL中查找重复值

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

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

 

设置样本表

首先,创建一个表命名为contacts四列:idfirst_namelast_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
);

 

其次,在表中插入行contacts

第三,从联系人表中查询数据:

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

 

通过使用此查询模板,您可以查找contacts表中具有重复电子邮件的行,如下所示:

SELECT 
    col1, COUNT(col1),
    col2, COUNT(col2),
    ...
 
FROM
    table_name
GROUP BY 
    col1, 
    col2, ...
HAVING 
       (COUNT(col1) > 1) AND 
       (COUNT(col2) > 1) AND 
       ...

仅当列的组合重复时才将行视为重复,因此我们ANDHAVING子句中使用了运算符。

 

例如,要查找的行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;

 

下面说明了查询的输出:

Mysql: 搜索重复数据, 搜索重复值, How To Find Duplicate Values in MySQL
Mysql: 搜索重复数据, 搜索重复值, How To Find Duplicate Values in MySQL

 

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

 

如何在MySQL中删除重复的行

以下查询返回表中的重复电子邮件contacts

该查询两次引用联系人表,因此,它使用表别名 t1和t2。

输出为:

Query OK, 4 rows affected (0.10 sec)

 

它表示已删除四行。您可以执行再次查找重复电子邮件的查询以验证删除:

步骤2.将不同的行从原始表插入到新表中:

步骤3.删除原始表并将立即表重命名为原始表

DROP TABLE source;
ALTER TABLE source_copy RENAME TO source;

例如,以下语句从contacts表中删除具有重复电子邮件的行:

C)使用ROW_NUMBER()函数删除重复的行

请注意,ROW_NUMBER()自MySQL 8.02版以来,该功能已受支持,因此您应在使用该功能之前检查MySQL版本。

以下语句使用该ROW_NUMBER()函数为每行分配一个连续的整数。如果电子邮件重复,则行号将大于一。

SELECT 
    id, 
    email, 
    ROW_NUMBER() OVER ( 
        PARTITION BY email 
        ORDER BY email
    ) AS row_num 
FROM contacts;

 

以下语句返回重复行的id列表:

MySQL发出以下消息:

本文:Mysql: 搜索重复数据, 搜索重复值, How To Find Duplicate Values in MySQL

Loading

Add a Comment

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.