准备示例数据

以下sql创建表,并将示例数据插入到用于演示的contacts表中。

CREATE TABLE contacts (
id INT PRIMARY KEY AUTO_INCREMENT,
first_val VARCHAR(50) DEFAULT NULL,
last_val VARCHAR(50) DEFAULT NULL,
email VARCHAR(255) NOT NULL
); INSERT INTO contacts (first_val,last_val,email)
VALUES ('Carine ','Schmitt','carine.schmitt@yiibai.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'),
('Jean','King','jean.king@gmail.com'),
('Peter','Ferguson','peter.ferguson@google.com'),
('Jonas ','Bergulfsen','jonas.bergulfsen@mac.com'),
('Janine ','Labrune','janine.labrune@qq.com'),
('Susan','Nelson','susan.nelson@qq.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'),
('Roland','Keitel','roland.keitel@yahoo.com');

方式一 克隆表删除重复的行

以下是使用克隆/复制表删除重复行的步骤

  • 克隆需要删除重复数据的表 ,其结构与要删除重复行的原始表相同。
  • 将原始表中的不同行插入直接表。
  • 删除原始表修改原始表名并将克隆表重命名为原始表

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

-- step1 克隆/复制表结构
CREATE TABLE contacts_temp LIKE contacts; -- step2 数据不重复插入克隆表
INSERT INTO contacts_temp(first_val,last_val,email) SELECT first_val,last_val,email FROM contacts GROUP BY email; -- step3 修改原始表以作备份,出错可以还原
ALTER TABLE contacts
RENAME TO contacts_copy; -- step4 修改原始表为克隆表
ALTER TABLE contacts_temp
RENAME TO contacts;

方式二 DELETE JOIN 删除重复行

以下查询返回contacts表中的重复email值:

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

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

使用DELETE JOIN语句删除重复的行

MySQL提供了可用于快速删除重复行的DELETE JOIN语句。

以下语句删除重复的行并保持最高的ID:

   DELETE t1
FROM
contacts t1
INNER JOIN contacts t2
WHERE
t1.id < t2.id
AND t1.email = t2.email;

重复行记录已被删除。我们再次执行查找重复的电子邮件的查询:

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

该查询返回一个空集合,这意味着重复的行已被删除。

Mysql 删除数据表重复行的更多相关文章

  1. MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  2. 十、MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  3. php MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  4. 吴裕雄--天生自然MySQL学习笔记:MySQL 删除数据表

    MySQL中删除数据表是非常容易操作的, 但是在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TABLE table_nam ...

  5. MySQL删除数据表中重复数据

    今天遇到一个问题,数据表的数据有重复的,关键原因在于新增数据时,没有根据条件先判断数据是否存在,当数据存在时进行有关条件的更新,不存在时做新增数据. 对于表中已经存在的数据处理办法的方法: 1.先根据 ...

  6. Mysql 删除数据表的三种方式详解

    用法: 1.当你不再需要该表时, 用 drop; 2.当你仍要保留该表,但要删除所有记录时, 用 truncate; 3.当你要删除部分记录或者有可能会后悔的话, 用 delete. 删除强度:dro ...

  7. 数据库删除数据表重复数据,只留下ID较小的行

    删除表中重复数据,留下ID比较小的行 delete from 表 where [重复字段] in (select [重复字段] from 表 group by 字段 having count([字段] ...

  8. sql语句删除数据表重复字段的方法

    大家都可能遇到字段重复的情况,网上很多人在找方法,也给出了一些方法,但是有的方法是误导大家,铁牛写出以下方法,方便大家使用 1.通过group by把重复的字段筛选出来,并建立临时表tmp 1 cre ...

  9. mysql 删除单表内多个字段重复的数据

    mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...

随机推荐

  1. bzoj1800飞行棋

    题目链接 简单模拟 真的不敢相信ahoi09年的题竟然是这个难度 首先,一个必须要知道的定理是:圆上只有直径所对的圆周角是直角. 然后就很显然了, 只有两条不重合的直径上的四个点才能组成一个矩形, 所 ...

  2. linux的档案权限和目录配置

    Linux一般将档案可存取的身份分为三个类别,分别是 owner/group/others /etc/passwd  账号信息 /etc/shadow 个人密码 /etc/group    组名记录 ...

  3. [ActionScript 3.0] 获取TextFiled字符边框

    /***** * getCharBoundaries () 方法 :返回一个矩形,该矩形是字符的边框. * getCharIndexAtPoint() 方法基于鼠标单击的 localX 和 local ...

  4. Struts2框架action路径问题心得----》页面url请求怎么找action

    Struts2 页面url请求怎么找action Struts2 页面url请求如何找action 1.我们使用最原始的方法去查找action,不同注解. struts.xml文件先配置 <!- ...

  5. 初学C#,用vs去开始hello world!

    小弟初学c#,刚刚学会用vs来编写经典的hello,world程序,记录,并且分享给大家. 1. 用vs新建一个c#控制台程序: a. 首先打开vs,如下图所示,点击[新建项目]

  6. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  7. 一些排序 (python实现)

    ►快速排序 <时间复杂度O(n㏒n)> def partition(li,left,right): tmp = li[left] while left < right: while ...

  8. confiparser模块

    什么是confiparser confiparser,翻译为配置解析,很显然,他是用来解析配置文件的, 何为配置文件? 用于编写程序的配置信息的文件 何为配置信息? 为了提高程序的扩展性,我们会把一些 ...

  9. mysql编码不统一形成的错误

    错误提示:[Err]1267 - Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) ...

  10. MySQL默认约束DEFAULT

    当插入记录时,如果没有明确为字段赋值,则自动赋予默认值. 例如: 性别: 1. 男 2. 女 3. 保密