`

MYSQL中删除重复记录的方法_zhuanzhuan

阅读更多

在实际应用中,很可能会碰到一些需要删除某些字段的重复记录,我现在把我能想到的写下来,望高手们补充。

1、
具体实现如下:

Table         Create Table                                           
------------  --------------------------------------------------------
users_groups  CREATE TABLE `users_groups` (                          
                `id` int(10) unsigned NOT NULL AUTO_INCREMENT,       
                `uid` int(11) NOT NULL,                              
                `gid` int(11) NOT NULL,                              
                PRIMARY KEY (`id`)                                   
              ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 

users_groups.txt内容:
1,11,502
2,107,502
3,100,503
4,110,501
5,112,501
6,104,502
7,100,502
8,100,501
9,102,501
10,104,502
11,100,502
12,100,501
13,102,501
14,110,501

mysql> load data infile 'c:\\users_groups.txt' into table users_groups fields
rminated by ',' lines terminated by '\n';
Query OK, 14 rows affected (0.05 sec)
Records: 14  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from users_groups;

query result(14 records)

 

id uid gid
1 11 502
2 107 502
3 100 503
4 110 501
5 112 501
6 104 502
7 100 502
8 100 501
9 102 501
10 104 502
11 100 502
12 100 501
13 102 501
14 110 501
14 rows in set (0.00 sec)

mysql> create temporary table tmp_wrap select * from users_groups group by uid having count(1) > 1 union all
select * from users_groups group by uid having count(1) = 1;
Query OK, 7 rows affected (0.11 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql> truncate table users_groups;
Query OK, 14 rows affected (0.03 sec)

mysql> insert into users_groups select * from tmp_wrap;
Query OK, 7 rows affected (0.03 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql> select * from users_groups;

query result(7 records)

 

id uid gid
1 11 502
2 107 502
3 100 503
4 110 501
5 112 501
6 104 502
9 102 501


mysql> drop table tmp_wrap;
Query OK, 0 rows affected (0.05 sec)

2、还有一个很精简的办法。

查找重复的,并且除掉最小的那个。

delete users_groups as a from users_groups as a,
(
select *,min(id) from users_groups group by uid having count(1) > 1
) as b
 where a.uid = b.uid and a.id > b.id;

(7 row(s)affected)
(0 ms taken)

query result(7 records)

 

id uid gid
1 11 502
2 107 502
3 100 503
4 110 501
5 112 501
6 104 502
9 102 501

3、现在来看一下这两个办法的效率。

运行一下以下SQL 语句

create index f_uid on users_groups(uid);
explain select * from users_groups group by uid having count(1) > 1 union all
select * from users_groups group by uid having count(1) = 1;

explain select * from  users_groups as a,
(
select *,min(id) from users_groups group by uid having count(1) > 1
) as b
 where a.uid = b.uid and a.id > b.id;

query result(3 records)

 

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY users_groups index (NULL) f_uid 4 (NULL) 14  
2 UNION users_groups index (NULL) f_uid 4 (NULL) 14  
(NULL) UNION RESULT <union1,2> ALL (NULL) (NULL) (NULL) (NULL) (NULL)  

query result(3 records)

 

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL (NULL) (NULL) (NULL) (NULL) 4  
1 PRIMARY a ref PRIMARY,f_uid f_uid 4 b.uid 1 Using where
2 DERIVED users_groups index (NULL) f_uid 4 (NULL) 14  

很明显的第二个比第一个扫描的函数要少。

 

发表于 @ 2008年04月19日 12:07:00 | 评论( 2 ) | 编辑 | 举报 | 收藏

旧一篇:MySQL动态行转列  | 新一篇:mysql的EVENT体验

-
分享到:
评论

相关推荐

    com.mysql.jdbc.Driver驱动包

    mysql的jdbc驱动包,需要的可以下载

    仿转转商城,带接口,开源,可二次开发

    "下载,导入数据库,修改config文件即可"是指用户在获取项目后,需要完成以下步骤来部署:首先下载所有文件,然后将`www_zhuanzhuan5.sql`数据库文件导入到MySQL数据库中,创建或更新相应的数据库结构;接着,需要...

    zhuanzhuan大马已删.zip

    标题“zhuanzhuan大马已删.zip”和描述中的“闲鱼2019最新程序 带完整库。100%可用 19.12月”揭示了这个压缩包可能包含的是闲鱼(Taobao Marketplace)或转转(Zhuanzhuan)二手交易平台的一个旧版本的应用程序源...

    与==的区别.docxequal与==的区别.docx

    在Java编程语言中,`equals()`方法和`==`运算符是用于比较对象之间关系的两种常见方式,但它们有着显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,`==`运算符主要用于比较基本类型(如int、char、...

    转转交易猫自带客服多模板全开源完整定制版源码

    http://你的域名地址/zhuanzhuan/ 安装教程; 环境; PHP版本5.6,数据库版本MySQL 5.6 第一步源码上传解压 第二步找到config文件夹找到Conn.php修改数据库 第三步导入数据库sql.sql 第四步http://域名/wuyun...

    转转源码PHP版完整可运行

    以下是对源码中关键文件和组件的详细解释: 1. **.htaccess**:这是一个Apache服务器的配置文件,用于重定向、URL隐藏和设置访问权限。在这个项目中,可能被用来优化URL结构,例如将动态URL转化为静态化形式,提高...

    闲鱼确认收货加转转交易猫闲鱼盼之代售最新源码.zip

    这可能是MySQL数据库的SQL脚本,用于创建表、插入数据或者执行其他数据库操作。开发者可以通过导入这个脚本来快速设置应用的数据环境。 3. **搭建教程**:`搭建教程.txt`文件提供了部署和运行这些源码的指南。它...

    2023年1月更新鲨鱼源码最新转转交易猫咸鱼整合源码

    标题中的“2023年1月更新鲨鱼源码最新转转交易猫咸鱼整合源码”表明这是一个关于二手交易平台源代码的更新版本,它整合了“鲨鱼源码”、“转转源码”以及“交易猫源码”,这三个都是在IT行业中常见的二手交易平台的...

    二手交易平台管理系统源码+数据库

    源码分析通常涉及编程语言(如Java、Python、Node.js等)、前端框架(React、Vue、Angular等)、数据库技术(MySQL、MongoDB等)以及服务器配置等多个方面。通过深入研究源码,可以掌握更多关于二手交易平台开发的...

    Soprano v1.58

    该软件的核心功能围绕播放列表展开,用户可以在单一窗口中管理他们的音乐库,方便快捷地查找和播放曲目。尽管界面简洁,但Soprano Audio Player很可能具备了基本的音乐播放控制,如播放、暂停、停止、上一曲、下一曲...

    开源完整定制版转转京东交易猫自带客服网站模板源码网 商城多模板源码 管理系统模板源码.zip

    转转交易猫自带客服多模板全开源完整定制版源码。 请在后台商品添加成功后,再点击该商品管理,可重新编辑当前商品的所有信息... ... 请在手机端打开访问 访问商品主要模板文件路径目录 ...http://你的域名地址/zhuanzhuan/

    转转好物 购物系统完成zip

    【文件名称列表】:由于只给出了“zhuanzhuan好物”这一名称,我们无法得知具体文件结构,但通常一个Java购物系统会包含以下部分: 1. **源代码**:包括Java源文件(.java),可能有如UserService.java(用户服务)...

    Python探索之爬取电商售卖信息代码示例

    if 'zhuanzhuan' in link_n: pass elif 'jump' in link_n: pass else: url_list = url_list + '\n' + link_n print('url_list:', url_list) return url_list ``` 该函数用于从目标网页中提取所有商品详情页...

    pdf转word软件

    根据提供的压缩包文件名“ZhuanZhuan_Setup_dl.exe”,我们可以推测这可能是一款名为“转转”的PDF转Word软件安装程序。通常,这样的软件会具有以下操作步骤: 1. **下载与安装**:用户首先需要从官方网站或可信的...

    伪分布式的搭建过程

    在伪分布式环境中,所有的Hadoop组件,包括NameNode、DataNode、ResourceManager、NodeManager等,都在同一台机器的不同进程中运行。虽然它们共享同一物理资源,但通过配置可以模拟多节点间的交互,实现数据分片、...

    基于svm 对ecg信号的离散情感识别

    基于ecg提取特征,识别7类情感,基于svm 对ecg信号的离散情感识别。通过使用neurokit包,提取生理信号特征,将生理信号分成7份,代表7类情感。然后调用sklearn包,用svm训练模型

    20206.3.py

    基于svm 对ecg信号的连续情感识别,valence arousal二分类。提取特征,ecgl ecgr两个通道识别情感

Global site tag (gtag.js) - Google Analytics