方法就比较多了。
最原始的笨方法
原理:
1、选出重复值。
2、根据重复值,选出重复的行
3、根据重复值,分组求最小id(最大id也一样)
4、从重复行中,去掉最小id对应的行。
select * from
(
select
*
from t_user where user_account in
(select user_account from t_user group by user_account having count(1) >1) -- 重复的数据
) t -- 划定数据范围(不划定就是全表肯定是不对的)
where
id not in
(select min(id) from t_user group by user_account having count(1) >1) -- 重复的数据中,分组选出最小id
注:
1、in 后面的select语句要加 小括号。
2、划定数据范围这个不要省。
显而易见,这个方法虽然能实现,但是比较繁琐。
根据rowid进行删除
rowid是每行的唯一标识符。
delete
from document
where
rowid not in
(select MIN(rowid) from document group by docid);
实测好用,而且速度快。
根据id进行删除
这样也是可以的,id是表的id。
DELETE FROM document
WHERE id NOT IN
(SELECT min(id) FROM document
GROUP BY docid)
当然还有其他方法,此处略。