mysql 重复数据删除只保留一条
创始人
2024-11-20 21:05:37
0

在MySQL中,删除重复数据并只保留一条记录可以通过几种方法实现,以下是一些常用的方法:
方法一:临时表法
创建临时表:首先创建一个临时表,结构与原表相同。
插入去重数据:使用INSERT INTO ... SELECT语句结合GROUP BY或DISTINCT将去重后的数据插入临时表。
删除原表数据:清空原表数据。
将临时表数据移回原表:将临时表中的数据插入回原表。
清理临时表:最后,如果不需要了,可以删除临时表。
示例SQL(假设表名为ceshi,主键或唯一标识列为id,重复依据列为name, class):

CREATE TEMPORARY TABLE temp_ceshi AS  SELECT MIN(id) as id, name, class FROM ceshi GROUP BY name, class;  DELETE FROM ceshi;  INSERT INTO ceshi SELECT * FROM temp_ceshi;  DROP TABLE temp_ceshi;

方法二:自连接删除法
直接在原表上操作,通过自连接删除重复项,但需确保你有足够的方式确定哪一行是需要保留的(例如,通过日期、ID或其他唯一条件)。
示例SQL(假设保留每个重复组中ID最小的记录):

DELETE c1 FROM ceshi c1, ceshi c2 WHERE c1.id > c2.id AND c1.name = c2.name AND c1.class = c2.class;

方法三:窗口函数(如果MySQL版本支持)
对于MySQL 8.0及以上版本,可以使用窗口函数ROW_NUMBER()来标记重复行,然后删除标记为非1(即重复的)行。

WITH CTE AS (     SELECT *, ROW_NUMBER() OVER(PARTITION BY name, class ORDER BY id) AS rn     FROM ceshi ) DELETE FROM ceshi WHERE id IN (SELECT id FROM CTE WHERE rn > 1);

请根据实际情况调整上述SQL语句中的表名、列名以及决定保留哪条记录的逻辑。在执行任何删除操作之前,强烈建议先备份数据,以防数据丢失。

相关内容

热门资讯

分享给玩家!广西友乐免费辅助使... 分享给玩家!广西友乐免费辅助使用视频,wepoker有没有挂,模块教程(确实有挂)-哔哩哔哩1、广西...
科普透视!佛手在线有挂吗!切实... 您好,佛手在线有挂吗这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家...
揭露透视!wpk辅助插件,we... 揭露透视!wpk辅助插件,wepoker怎么发冤家牌,操作教程(有挂秘诀)-哔哩哔哩1、wepoke...
发现玩家!八仙游戏辅助,hhp... 发现玩家!八仙游戏辅助,hhpoker德州真的假的,资料教程(有挂秘籍)-哔哩哔哩八仙游戏辅助能透视...
关于透视!佛手大菠萝13道挂哪... 关于透视!佛手大菠萝13道挂哪里!好像是有辅助插件(讲解有挂)-哔哩哔哩1、佛手大菠萝13道挂哪里透...
普及透视!wepoker辅助工... 普及透视!wepoker辅助工具,wepoker透视脚本是什么,诀窍教程(有挂教学)-哔哩哔哩1)w...
我来教大家!hhpoker作必... 我来教大家!hhpoker作必弊实战视频,hhpoker德州牛仔视频,窍门教程(有挂教学)-哔哩哔哩...
关于透视!pokemmo免费脚... 关于透视!pokemmo免费脚本!一直一直都是有辅助插件(发现有挂)-哔哩哔哩1、进入到pokemm...
开挂透视!红龙poker有辅助... 开挂透视!红龙poker有辅助吗,wepoker破解是真的还是假的,手段教程(证实有挂)-哔哩哔哩1...
关于!小旋风辅助器,wepok... 关于!小旋风辅助器,wepoker透视脚本免费下载pc,模块教程(有挂头条)-哔哩哔哩1、在小旋风辅...