mysql使用sql语句删除重复数据(去重)
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2023-05-09 16:32:31
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
第一个
假如有一个数据表sm_movies
里面有重复的电影想去掉重复的并且保存一个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排除掉,剩下的就是每个组中其它要删除的记录
第二个
如下图
里面有很多重复的项重复的条数还不固定 本来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值最大的那一条取出来,把这一条除外,这样删除的时候就留下来啦