如何在mysql中删除重复数据

复制代码
#分组去重法 讲重复的列进行分组 之后用min(id) 
#取其中最小的保留,其余的删除
-- 步骤 1: 创建临时表,保存每组最小的ID
CREATE TEMPORARY TABLE tmp_keep_ids AS
SELECT MIN(id) AS id
FROM 重复表名
GROUP BY 重复列;
-- 步骤 2: 删除原表中不在临时表中的记录
DELETE FROM 原表
WHERE id NOT IN (SELECT id FROM 临时表);
-- 步骤 3: 删除临时表
DROP TEMPORARY TABLE tmp_keep_ids;

ps: 为什么要创建临时表呢?

因为mysql不允许在删除这张表的时候用这个表作为条件查询,用原来的表做条件是会报错的

这样做的原理是什么呢?

在mysql中min()函数是取这列最小值,思路就是,先找到重复的列进行分组,然后用min()函数保留每个重复组里的最小值。就可以得出如果不在这里的id就都是重复列的id,可以删除。