如何用sql语句删除数据库中的重复记录?
mysql里有五百万数据,但大多是重复的,真实的就180万,于是想怎样把这些重复的数据搞出来,网上提供的方法好多是用not in这样的代码,这样效率很低。
找到一个高效的处理方式,用这个方式,五百万数据,十来分钟就全部去除重复了,请各位参考。
相关阅读:
第一步:从500万数据表data_content_152里提取出不重复的字段SFZHM对应的ID字段到TMP3表,sql语句如下:
复制代码 代码示例:
create table tmp3 as select min(id) as col1 from data_content_152 group by SFZHM;
第二步:创建新表RES
复制代码 代码示例:
CREATE TABLE `res` (
`id` int(11),
`sfz` char(20)
) ENGINE=myisam;
第三步:把TMP3表ID对应到data_content_152里需要提取的数据添加到RES表的SFZ字段
复制代码 代码示例:
INSERT INTO res (sfz) SELECT sfzhm FROM data_content_152,tmp3 where data_content_152.id=tmp3.col1
至此,就在mysql数据库中实现了为数据表data_content_152完全删除重复数据,把去重复后的数据导入到res表。
SQL查询及删除重复记录的方法(sql语句大全)
查数据:
复制代码 代码示例:
select count(num), max(name) from student group by num having count(num) > 1 --列出重复的记录数,并列出他的name属性
select * from tablename where id in (select id from tablename group by id having count(id) > 1)
group by id having count(id) >1 --按id分组后找出表中id列重复,即出现次数大于一次,一般会列出最小数的那个。
删数据:
复制代码 代码示例:
delete from tablename group by id having count(id) >1
以上删除了所有重复数据。
有时需要把重复的保留1条,语句如下:
复制代码 代码示例:
delete from tablename where id in (select id from tablename group by id having count(id) > 1) and rowid not in (select min(rowid) from tablename group by id having count(id )>1)