1)找到要删除的数据 然后删除这些数据。具体实现如下, delete users as a from table as a,( select min(id) , name from table group by name having count(name) > 1
) as b where a。
name = b。name and a。id b。id; 加上 having count(name) > 1 可以避免扫描没有重复的记录,提高效率 2)找到要保留的数据 然后用not in 来删除不再这些数据中的记录。大家很容易就想到如下的sql语句:
delete from users where id not in ( select min(id) from users group by name ); 但是mysql删 除动作不能带有本表的查询动作,意思是你删除users表的东西不能以users表的信息为条件 所以这个语句会报错,执行不了。
只要通过创建临时表作为查询条件。具体实现如下:
delete from users where id not in ( select * from ( select min(id) from users group by name ) );。
查询 select x,count(*) c from tab having c > 1;
删除 对x 加unique index , 使用 ignore .
用子查询having count(*) > 1的得到要删除的数据即可.
只要能把重复的内容找出来,删除就不是问题了。可以通过select * from dou group by id having count(*) > 1 来完成对重复数据的查找; 之后再delete掉就行了。
下面是我的一个小例子:
create table dou ( id varchar(4), name varchar(8));
insert into dou values ( '123', 'name123'), ( '123', 'name123'), ( '124', 'name123');
select id, name from dou group by id, name having count(*) > 1;
select * from dou group by id having count(*) > 1;