博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql去除重复数据
阅读量:4580 次
发布时间:2019-06-09

本文共 3623 字,大约阅读时间需要 12 分钟。

今天一个同学问我mysql去除重复数据,自己做了个测试顺便记录下:

查看表结构:

mysql> desc testdelete;+-------+-------------+------+-----+---------+----------------+| Field | Type        | Null | Key | Default | Extra          |+-------+-------------+------+-----+---------+----------------+| id    | int(11)     | NO   | PRI | NULL    | auto_increment || one   | varchar(40) | YES  |     | NULL    |                || two   | varchar(40) | YES  |     | NULL    |                || three | varchar(40) | YES  |     | NULL    |                |+-------+-------------+------+-----+---------+----------------+4 rows in set (0.10 sec)

 

 

表的数据:

mysql> select * from testdelete;+----+------+------+-------+| id | one  | two  | three |+----+------+------+-------+|  1 | A    | A    | A     ||  2 | B    | B    | B     ||  3 | C    | C    | C     ||  4 | D    | D    | D     ||  5 | E    | E    | E     ||  6 | A    | A    | B     || 12 | A    | A    | A     || 13 | A    | A    | A     || 14 | A    | A    | A     || 15 | A    | A    | A     |+----+------+------+-------+10 rows in set (0.00 sec)

 

 

 

接下来进行测试:

1.根据one列查询重复的数据(根据单列判断重复)

SELECT * FROM testdelete WHERE ONE IN (SELECT ONE FROM testdelete GROUP BY ONE HAVING COUNT(ONE) > 1)

 

 

结果:

 

 2.删除表中的重复记录:(根据单列删除且保留ID最小的一条

DELETEFROM testdeleteWHERE ONE IN(SELECT               ONE             FROM testdelete             GROUP BY ONE             HAVING COUNT(ONE) > 1)    AND id NOT IN(SELECT                    MIN(id)                  FROM testdelete                  GROUP BY ONE                  HAVING COUNT(ONE) > 1)

 

 

 报错:

 

原因:大概是因为不能直接在查询的语句中进行操作。

解决办法:将查询包装一层:

DELETEFROM testdeleteWHERE ONE IN(SELECT               ONE             FROM (SELECT                     ONE                   FROM testdelete                   GROUP BY ONE                   HAVING COUNT(ONE) > 1) a) AND id NOT IN(SELECT * FROM (SELECT MIN(id) FROM testdelete GROUP BY ONE HAVING COUNT(ONE) > 1) b)

 

 

 结果:

(5 row(s) affected)

Execution Time : 00:00:00:094
Transfer Time : 00:00:00:000
Total Time : 00:00:00:094

 

再次查看数据:

 

 

将数据还原。 

 

 3.根据one,two,three判断重复:(根据单多判断重复)

SELECT * FROM testdelete a WHERE (a.one,a.two,a.three) IN (SELECT ONE,two,three FROM testdelete GROUP BY ONE,two,three HAVING COUNT(*) > 1)

 

结果;

 

 

4.删除表中的重复数据(根据多列进行删除且保留ID最小的一条)

 

DELETEFROM testdeleteWHERE (ONE,two,three)IN(SELECT                          ONE,                          two,                          three                        FROM (SELECT                                ONE,                                two,                                three                              FROM testdelete                              GROUP BY ONE,two,three                              HAVING COUNT( * ) > 1) a)    AND id NOT IN(SELECT                    MIN(id)                  FROM (SELECT                          MIN(id) AS id                        FROM testdelete                        GROUP BY ONE,two,three                        HAVING COUNT( * ) > 1) b)

 

 

 结果:

(4 row(s) affected)

Execution Time : 00:00:00:125
Transfer Time : 00:00:00:000
Total Time : 00:00:00:125

 

查看数据:

 

 

数据还原

 5. 查找表中多余的重复记录(多个字段),不包含id最小的记录 (根据多个字段查重复不包含id最小的)

SELECT *FROM testdelete aWHERE (a.one,a.two,a.three)IN(SELECT                                ONE,                                two,                                three                              FROM testdelete                              GROUP BY ONE,two,three                              HAVING COUNT( * ) > 1)    AND id NOT IN(SELECT                    MIN(id) AS id                  FROM testdelete                  GROUP BY ONE,two,three                  HAVING COUNT( * ) > 1)

 

 结果:

 

转载于:https://www.cnblogs.com/qlqwjy/p/8270011.html

你可能感兴趣的文章
hdu 4524 郑厂长系列故事——逃离迷宫 解题报告
查看>>
.net图表之ECharts随笔04-散点图
查看>>
linux下时间的同步
查看>>
redis(七)---- SpringBoot和redis整合
查看>>
Apple Swift编程语言入门教程
查看>>
接口测试 dubbo 接口测试
查看>>
ORM表相关操作
查看>>
121. Best Time to Buy and Sell Stock【easy】
查看>>
运放输入相位补偿电容
查看>>
【转】<string> <string.h> <cstring>的区别
查看>>
Python基础:列表,元组和字典的基本操作
查看>>
各种奇技淫巧-持续更新
查看>>
扩展知识
查看>>
使用图形界面管理工具Navicat for MySQL连接Mysql数据库时提示错误:Can't connect to MySQL server (10060)...
查看>>
win10内嵌ubuntu中mysql配置总结
查看>>
CSS总结(三)—— 盒子模型(标准/IE下)
查看>>
html设置编码
查看>>
结构体
查看>>
用户服务的业务框架
查看>>
Python 字符串处理大全.
查看>>