需求:
第一种,数据有主键,目前存在有除了主键不一样,其他数据都一样的数据,比如:
id (pk) =1, name = 刘德华,sex =男
id (pk) =2, name = 刘德华,sex =男
这种情况下,在数据量少的情况下可以直接跑删除sql :
delete from 表aaa where b.id not in (
select min(id) from 表aaa group by name,sex (sql不是只有这一种,只要能查出不重复的id就行)
)
但是,当数据量大的情况下 比如上千万上亿,单表可能就跑不动了,此时我们可以另辟新径,
新建一张一模一样的表(直接copy create语句),然后去insert就行
insert into 表copy select * from 表aaa GROUP BY name,sex
这种在数据量大的情况下速度是比删除快很多的。
第二种,数据没有主键,存在全部字段的内容都一样的数据 比如
name = 刘德华,sex =男 ,age=18
name = 刘德华,sex =男 ,age=18
这种我们直接 同理上面的 新建一张一模一样的表 然后
insert into 表copy SELECT DISTINCT(name ),age,sex FROM 表aaa 就可