2019独角兽企业重金招聘Python工程师标准>>>

如何在MySQL表中删除重复行

在实际应用中,会有需要删除重复数据的场景。这里简单介绍下如何删除重复的数据

1. 准备数据

CREATE IF NOT  EXISTS testdb;USE testdb;CREATE TABLE contacts (id INT PRIMARY KEY AUTO_INCREMENT,first_name VARCHAR(50) DEFAULT NULL,last_name VARCHAR(50) DEFAULT NULL, email VARCHAR(255) NOT NULL
);INSERT INTO contacts (first_name,last_name,email)
VALUES ('Carine ','Schmitt','carine.schmitt@yiibai.com'),('Jean','King','jean.king@gmail.com'),('Peter','Ferguson','peter.ferguson@google.com'),('Janine ','Labrune','janine.labrune@qq.com'),('Jonas ','Bergulfsen','jonas.bergulfsen@mac.com'),('Janine ','Labrune','janine.labrune@qq.com'),('Susan','Nelson','susan.nelson@qq.com'),('Zbyszek ','Piestrzeniewicz','zbyszek.piestrzeniewicz@att.com'),('Roland','Keitel','roland.keitel@yahoo.com'),('Julie','Murphy','julie.murphy@yahoo.com'),('Kwai','Lee','kwai.lee@google.com'),('Jean','King','jean.king@qq.com'),('Susan','Nelson','susan.nelson@qq.com'),('Roland','Keitel','roland.keitel@yahoo.com');

首先可以查询重复的内容,执行以下语句查询返回contacts表中的重复email值:

SELECT email, COUNT(email)
FROMcontacts
GROUP BY email
HAVING COUNT(email) > 1;

得到结果:

+-------------------------+--------------+
| email                   | COUNT(email) |
+-------------------------+--------------+
| janine.labrune@qq.com   |            2 |
| roland.keitel@yahoo.com |            2 |
| susan.nelson@qq.com     |            2 |
+-------------------------+--------------+
3 rows in set

可以看到,表中有重复的email行记录。

2. DELETE JOIN删除

MySQL提供了可以快速删除重复行的Delete join语句,以下语句删除重复行并保持最高的id:

DELETE t1 FROM contacts t1INNER JOINcontacts t2
WHEREt1.id < t2.id AND t1.email = t2.email;Query OK, 3 rows affected

如上所示,三行记录被删除。再次执行查询重复的语句:

SELECT email, COUNT(email)
FROMcontacts
GROUP BY email
HAVING COUNT(email) > 1;

返回空集,代表重复行已删除。

查询验证contacts表中的数据:

SELECT *
FROM contacts

ID 为 4,7和9的行记录已被删除。

3. 直接表删除

以下是直接使用表删除重复行的步骤:

  • 创建一个新表,其结构与要删除重复行的原始表相同。
  • 将原始表中的不同行插入直接表。
  • 删除原始表并将直接表重命名为原始表。

步骤1 -

CRAETE TABLE source_copy FROM source;

步骤2 -

INSERT INTO source_copy
SELECT * FROM source
GROUP BY col;    --column that has duplicate value

步骤3 -

DROP TABLE source
ALTER TABLE source_copy RENAME TO source

例如,一下语句从 contacts 表中删除具有重复电子邮件(email)的行记录:

--step 1
CREATE TABLE contacts_temp
LIKE contacts;--step 2
INSERT INTO contacts_temp(email) SELECT email FROM contacts GROUP BY email;--step 3
DROP TABLE contacts;ALTER TABLE contacts_temp
RENAME TO contacts;

转载于:https://my.oschina.net/dantefu/blog/1531700

温故知新MySQL--如何在MySQL表中删除重复行相关推荐

  1. sql删除表中重复记录_SQL从SQL表中删除重复行的不同方法

    sql删除表中重复记录 This article explains the process of performing SQL delete activity for duplicate rows f ...

  2. mysql scrapy 重复数据_MySQL大数据量表中删除重复记录

    MySQL大数据量表中删除重复记录 最近工作中需要抓取大量新闻,抓取的数据中由于一些原因存在一些重复数据,而整个数据表的记录数接近10万条,大小接近1个G,又在我自己的渣渣本本上,查询速度十分不理想, ...

  3. MSSQL如何在没有主键的表中删除重复数据

    MSSQL如何在没有主键的表中删除重复数据 原文:MSSQL如何在没有主键的表中删除重复数据 为了对重复数据进行实验,下面建一个设计不太好(没有主键)表并插入了一些重复数据: create datab ...

  4. 删除数据表中的重复行

    原表数据 select subscrbid, prcplnid,min(begtime),min(endtime),count(*) from NEW_TRAIN_TAB_SUBSCRBPRCPLN ...

  5. 利用T-SQL处理SQL Server数据库表中的重复行

    Duplicate rows in a SQL Server database table can become a problem. We will see how we can find and ...

  6. mysql 如何删除重复的行_如何从mysql中的表中删除重复的行

    我需要从 mysql中删除表中的重复记录. 所以我有一个表名"employee"字段是empid,empname,empssn 为了获得重复记录我写了一个查询 SELECT COU ...

  7. sqlserver中删除重复行的方法

    前段时间,公司同事不小心在数据库表中重加了数据,不多,7000条左右.因为信息比较重要,不能删错了.但也不能有重复数据.所以找我求救. 解决问题后,总结如下: SQL Server删除重复行是我们最常 ...

  8. 【SQL】去除表中的重复行

    去除emp表中相同的行: SCOTT@LGR> delete from emp a where rowid not in (select max(rowid) from emp b where ...

  9. php删除多表数据,mysql – 从多个表中删除数据

    假设,我有一个名为UNIVERSITY的表,其中包含大学名称: universityID universityNAME isACTIVE 7 GNDU 1 6 PU 1 5 PTU 1 8 LPU 1 ...

最新文章

  1. linux history 命令 shell历史记录显示 HISTSIZE
  2. 向有环的环形链表中插入新节点
  3. 我们的合作伙伴Datawhale两岁啦!
  4. 【音视频安卓开发 (三)】OpenGL ES 直接绘制YUV
  5. WordPress前台后台页面打开慢的解决方法
  6. 半导体物理学习记录——概述
  7. 2022年CISP报名考试详情
  8. Pycharm生成决策树
  9. SQL ——窗口函数简介
  10. seo搜索引擎优化-SEO优化教程附关键词工具以及文章采集软件
  11. CSS文字超出部分用省略号代替,js鼠标悬停时显示全部文本
  12. 【云原生 | 10】Docker数据管理
  13. 哔咔服务器维护时间,哔咔
  14. 如何有效预防XSS?这几招管用!!!
  15. idea :不支持发行版本11问题
  16. 立创开源丨红外手电筒遥控器(大功率)
  17. 【停车位预测】基于matlab BP神经网络停车位预测【含Matlab源码 765期】
  18. Hollong 低功耗蓝牙4.0/4.1/4.2 BLE Sniffer协议分析仪
  19. [渝粤教育] 四川大学 Python语言与化工智能化 参考 资料
  20. 惯性导航和惯性器件(二)

热门文章

  1. 【STM32 .NET MF开发板学习-29】摄像头蓝牙图像远程获取
  2. Matlab系统信息、系统命令和跨平台
  3. Java使用POI读取和写入Excel指南
  4. [转]小心C# 5.0 中的await and async模式造成的死锁
  5. 《Servlet和JSP学习指南》一第2章 Session管理 2.1 网址重写
  6. stitching detail输出的dot图含义
  7. Linux内核学习笔记十一——I/O层和I/O调度机制
  8. redmine升级了 ,6与18日同时发布2.0.3和1.4.4
  9. Silverlight学习笔记之使用TranslateTransform控制对象位置
  10. 《Pro SQL Server Internals》部分翻译(P155-165)