时间:2021-07-01 10:21:17 帮助过:38人阅读
在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; |