mysql使用sql语句删除重复数据(去重)

来源:赵克立博客 分类: 数据库 标签:SQL数据库发布时间:2016-11-24 13:36:12最后更新:2023-05-09 16:32:31浏览:2099
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2023-05-09 16:32:31
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

第一个

假如有一个数据表sm_movies

blob.png

里面有重复的电影想去掉重复的并且保存一个movies_id值最大的那一个

DELETE FROM `sm_movies` WHERE movies_id NOT IN 
(
	SELECT * FROM (
		SELECT MAX(movies_id) as movies_id FROM `sm_movies` GROUP BY title
	) AS tmp
);

首先使用下面语句查出来重复的title记录,并从每组中取中movies_id最大的那个id,分组后没有重复的则只有一条数据,肯定会选择出来,有多条数据的则只取最大的那条。

SELECT MAX(movies_id) FROM `sm_movies` GROUP BY title

然后用 not in把查出来的movies_id排除掉,剩下的就是每个组中其它要删除的记录

第二个

如下图

image.png

里面有很多重复的项重复的条数还不固定  本来short_id应该是不能重复的

想实现的是让short_id 唯一 其它的都删除掉 只留下一个  user_id 字段值最大的出来

delete from user
where   short_id in ( select short_id from (select short_id    from kl_user group by short_id      having count(short_id) > 1) as tem)
and     user_id not in (select user_id from (select MAX(user_id) as user_id from kl_user group by short_id     having count(short_id)>1) as temp )

可以看到语句有两个条件

条一个条件把 short_id 这个字段有重复的取出来

第二个条件从重复的short_id中把user_id值最大的那一条取出来,把这一条除外,这样删除的时候就留下来啦


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python