

在sql中我们经常会碰到有重复的一些数据,下面我来介绍在mysql中删除重复记录的多种方法,有需要的朋友可参考参考。
删除重复记录方法一:
1. 新建一个临时表
| 代码如下 | |
| create table tmp as select * from youtable group by name(name为不希望有重复的列) | |
2. 删除原来的表
| 代码如下 | |
| drop table youtable | |
3. 重命名表
| 代码如下 | |
| alter table tmp rename youtable | |
但是这个方法有个问题,由临时表转变过来的最终表,其表结构会和原来的不一致,需要手工更改。这个问题,待解决。
删除重复记录方法二:
1. 新建一个临时表
| 代码如下 | |
| CREATE TABLE tmp AS SELECT * FROM youtable GROUP BY name(name为不希望有重复的列) | |
2. 清空原来的表
| 代码如下 | |
| TRUNCATE TABLE youtable | |
3. 把临时表插入到youtable
| 代码如下 | |
| INSERT INTO tablename SELECT * FROM temp | |
4. 删除临时表
| 代码如下 | |
| DROP TABLE temp | |
删除重复记录方法三:
| 代码如下 | |
| delete table where ID not in(select min(ID) from table group by name(name:重复的字段)) | |
删除重复记录方法四:
具体实现如下:
| 代码如下 | |
| Table Create Table  users_groups.txt内容: 1,11,502 mysql> load data infile 'c:\users_groups.txt' into table users_groups fields mysql> select * from users_groups; query result(14 records) id uid gid  | |
根据一位兄弟的建议修改。
| 代码如下 | |
| mysql> create temporary table tmp_wrap select * from users_groups group by uid having count(1) >= 1; mysql> truncate table users_groups; mysql> insert into users_groups select * from tmp_wrap; mysql> select * from users_groups; query result(7 records) 
 | |
2、还有一个很精简的办法。
查找重复的,并且除掉最小的那个。
| 代码如下 | |
| delete users_groups as a from users_groups as a, | |
3、现在来看一下这两个办法的效率。
运行一下以下SQL 语句
| 代码如下 | |
| create index f_uid on users_groups(uid);     | |
很明显的第二个比第一个扫描的函数要少。
当没有创建表或创建索引权限的时候
创建一个新表,然后将原表中不重复的数据插入新表:
| 代码如下 | |
| mysql> create table demo_new as select * from demo group by site;  | |
然后将原表备份,将新表重命名为当前表:
| 代码如下 | |
| mysql> rename table demo to demo_old, demo_new to demo;  | |
