logo图片
MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

MySQL 删除重复记录

MySQL是一个数据库应用程序,它以行和列的形式将数据存储在表中。该数据库应用程序可以在表中存储重复的记录,这可能会影响MySQL中数据库的性能。但是,由于各种原因会发生数据重复,因此在 MySQL MySQL 中使用表时,删除表中的重复值是一项重要的任务。。
通常,最好始终在表上使用唯一约束来存储防止重复行的数据。 在本文中,我们将学习如何从MySQL数据库中删除重复的记录
让我们借助示例来理解它。假设我们有一个名为 " student_contacts" 的表,其中包含许多重复的记录:
 MySQL删除重复记录
现在,我们将看到如何从表中删除重复记录。 MySQL可以主要通过三种方式删除重复记录。

1、使用Delete Join删除重复记录

我们可以在MySQL中使用 DELETE JOIN语句,该语句允许我们可以快速删除重复的记录。以下语句从表中删除重复的行,并保留最大的id:
DELETE S1 FROM student_contacts AS S1
INNER JOIN student_contacts AS S2 
WHERE S1.id < S2.id AND S1.email = S2.email;
此查询两次引用了Student_contacts表。因此,我们将使用表别名 S1 S2 。执行该语句后,我们将获得以下输出:
MySQL删除重复记录
以上输出表明已从表中删除 5条记录。我们可以通过执行下面的查询来返回表的重复记录来验证这一点。
SELECT name, email, COUNT(name)
FROM student_contacts
GROUP BY name
HAVING COUNT(name) > 1;
它将返回如下输出, 显示一个空集。这意味着重复记录已成功从表中删除。
MySQL删除重复记录
我们还可以使用 SELECT语句进行验证。在下图中,我们可以看到表中没有可用的重复记录。
MySQL删除重复记录
假设我们要删除重复记录并在表中保留最低ID。在这种情况下,我们将使用以下语句:
DELETE S1 FROM student_contacts AS S1
INNER JOIN student_contacts AS S2 
WHERE S1.id > S2.id AND S1.email = S2.email;
注意,在执行查询之前,我们需要再次创建一个包含重复记录的表。执行该语句后,我们将获得以下输出:
MySQL删除重复记录
我们也可以使用SELECT语句来验证它。在下图中,我们可以看到具有较高ID的重复记录已被删除。
MySQL删除记录重复

2、使用ROW_NUMBER()函数删除重复记录

T ROW_NUMBER()函数返回分区中每一行的顺序号,从1到分区中存在的行数。
我们可以使用以下语句,该语句使用 ROW_NUMBER()函数为每一行分配一个顺序号。如果此查询找到表重复项的 name 列,则会为 行号分配大于一的行
SELECT id, name, ROW_NUMBER() 
OVER (PARTITION BY name ORDER BY name) AS row_num 
FROM student_contacts;
执行后,我们将获得以下输出:
MySQL删除重复记录
如果只想获取重复的id行,请使用以下语句:
SELECT id FROM (SELECT id, ROW_NUMBER() 
OVER (PARTITION BY name ORDER BY name) AS row_num 
FROM student_contacts) AS temp_table WHERE row_num>1;
此语句重新运行以下输出:
MySQL删除重复记录
We现在可以在 删除的帮助下从 student_contacts 表中删除重复的记录。语句和子查询 www.lidihuo.com/mysql-where"> WHERE 子句。请参阅以下语句:
DELETE FROM student_contacts WHERE id IN(
    SELECT id FROM (SELECT id, ROW_NUMBER() 
       OVER (PARTITION BY name ORDER BY name) AS row_num 
    FROM student_contacts) AS temp_table WHERE row_num>1
);
执行后,我们将得到如下图所示的输出,可以看到该语句已从表中删除了5条记录。您可以使用SELECT语句验证是否删除了重复的行。
MySQL删除重复记录

3、使用中间表删除重复的行

我们还可以使用中间表从表中删除重复的记录。以下是在中间表的帮助下删除重复记录的要点:
1、创建一个具有与原始表相同结构的新表,我们将使用该表删除重复的记录。
mysql> CREATE TABLE new_table_name LIKE source_table_name;
2、将原始表的唯一(不同)行插入到新创建的表中。
mysql> INSERT INTO new_table_name
SELECT * FROM source_table_name
GROUP BY column; //It is the name of a column that contains duplicate values.
3、删除原始表,并重新命名与原始表相同的新创建的表。
mysql> DROP TABLE source_table_name;
mysql> ALTER TABLE new_table_name RENAME TO source_table_name;
让我们借助以下查询来理解上述步骤,这些查询使用中间表删除重复记录:
步骤1:
mysql> CREATE TABLE student_contacts_temp LIKE student_contacts;
步骤2:
mysql> INSERT INTO student_contacts_temp
SELECT * FROM student_contacts 
GROUP BY email; //It is the name of column that contains duplicate values.
步骤3:
mysql> DROP TABLE student_contacts;
mysql> ALTER TABLE student_contacts_temp RENAME TO student_contacts;
请参见下图以了解上述步骤。
MySQL删除重复记录
昵称: 邮箱:
Copyright © 2020 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4