第一个
假如有一个数据表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最大的那个idSELECT 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值最大的那一条取出来,把这一条除外,这样删除的时候就留下来啦