文档章节

如何删除MYSQL表中的重复数据

沉默的子明
 沉默的子明
发布于 2016/11/18 17:28
字数 318
阅读 29
收藏 0

在Mysql中,要想删除一个表中重复的数据,并且只保留一条,该如何做?

例如,库中存在表t_invest_return_record_sum (t),

有字段id,partner_id,invest_return_time,product_id ,有如下几条记录

(1,‘b’,'c','d'),(2,‘b’,'c','d'),(5,‘b1’,'c1','d1')

现要根据b,c,d三个字段重复的删除,留下id最小的一条(最多只有两条重复)

DELETE ta FROM t as ta INNER JOIN (SELECT max(tt.id) id FROM t as tt
GROUP BY tt.b,tt.c,tt.d HAVING COUNT(1)>=2) tb
ON ta.id = tb.id;

不能直接删除,如

DELETE FROM t where id in (SELECT id FROM t as tt
GROUP BY tt.b,tt.c,tt.d HAVING COUNT(1)>=2);

如果重复数超过2个或者不确定重复数,则需要在子查询中处理一下

(1,‘b’,'c','d'),(2,‘b’,'c','d'),(3,‘b’,'c','d'),(4,‘b’,'c','d'),(5,‘b1’,'c1','d1')

保留id最小的那条

DELETE tt FROM t_invest_return_record_sum tt INNER JOIN
(SELECT a.id FROM t_invest_return_record_sum a INNER JOIN
(SELECT t.partner_id,t.invest_return_time,t.product_id FROM t_invest_return_record_sum t 
GROUP BY t.partner_id,t.invest_return_time,t.product_id HAVING COUNT(1)>=2)t1
ON a.partner_id = t1.partner_id
AND a.invest_return_time = t1.invest_return_time
AND a.product_id = t1.product_id) t2
ON tt.id = t2.id
LEFT JOIN 
(SELECT min(a.id) id FROM t_invest_return_record_sum a INNER JOIN
(SELECT t.partner_id,t.invest_return_time,t.product_id FROM t_invest_return_record_sum t 
GROUP BY t.partner_id,t.invest_return_time,t.product_id HAVING COUNT(1)>=2)t1
ON a.partner_id = t1.partner_id
AND a.invest_return_time = t1.invest_return_time
AND a.product_id = t1.product_id) t3
ON tt.id = t3.id
WHERE t3.id IS NULL

© 著作权归作者所有

共有 人打赏支持
沉默的子明
粉丝 4
博文 36
码字总数 1245
作品 0
南京
私信 提问
MySQL专题10之MySQL序列使用、MySQL处理重复数据、MySQL以及SQL的注入

1、MySQL序列使用 - MySQL序列是一组整数:1,2,3...,由于一张数据表只能有一个字段自增主键,如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现。 - 使用AUTOINCREMENT:MySQL...

极客微信条
2017/11/21
0
0
MySQL基础教程

这是一个基础的MySQL教程,通过教程的学习后可以到达一个初级到中级 MySQL应用水平级别 ,主要介绍一些MySQL中基本的SQL语句。如果这是您第一次使用关系数据库管理系统(之前没有学习SQL相关...

易百教程
2016/10/11
37
0
Navicat使用教程:如何删除MySQL中具有不同ID的重复行

下载Navicat Premium最新版本 Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。 大...

电池盒
01/31
0
0
Navicat使用教程:在MySQL中使用SELECT DISTINCT消除重复行

下载Navicat Premium最新版本 Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。 My...

电池盒
02/11
0
0
MySQL Replace语句

在本教程中,您将学习如何使用 MySQL的语句来插入或更新数据库表中的数据。 MySQL REPLACE语句介绍 MySQL的REPLACE语句是一个MySQL扩展于SQL标准的语句。 MySQL REPLACE语句的工作原理如下:...

易百教程
2016/09/20
12
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
今天
3
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
今天
2
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部