MySQL 数据库删除表中重复数据

采集数据的时候,由于先期对页面结构的分析不完善,导致采漏了一部分数据。完善代码之后重新运行 Scrapy,又采集了一些重复的数据,搜了下删除重复数据的方法。

N.B. 删除数据表的重复数据时,请先备份数据表。

方法一

# 保留主键 ID 较小的那条记录
DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name

# 保留主键 ID 较大的那条记录
DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name

方法二

# 保留主键 ID 较大的那条记录
DELETE FROM NAMES
 WHERE id NOT IN (SELECT * 
                    FROM (SELECT MIN(n.id)
                            FROM NAMES n
                        GROUP BY n.name) x)

# 保留主键 ID 较小的那条记录
DELETE FROM NAMES
 WHERE id NOT IN (SELECT * 
                    FROM (SELECT MAX(n.id)
                            FROM NAMES n
                        GROUP BY n.name) x)

P.S. 当数据表的数据量较多时,建议使用方法二,大大节省时间。 

参考链接:

  1. Delete all Duplicate Rows except for One in MySQL? [duplicate]
  2. sql - Remove duplicate rows in MySQL - Stack Overflow
原文地址:https://www.cnblogs.com/imzhi/p/mysql-remove-duplicate-records.html