mysql删除重复数据仅仅保留一条——学习笔记

1、创建表并且插入数据

create table `test` (
	`id` int (11),
	`name` varchar (765),
	`address` varchar (765)
); 
insert into `test` (`id`, `name`, `address`) values('1','aa','cc');
insert into `test` (`id`, `name`, `address`) values('2','aa','cc');
insert into `test` (`id`, `name`, `address`) values('3','aa','cc');
insert into `test` (`id`, `name`, `address`) values('4','bb','cc');
insert into `test` (`id`, `name`, `address`) values('5','bb','cc');
insert into `test` (`id`, `name`, `address`) values('6','a','1');
insert into `test` (`id`, `name`, `address`) values('7','b','2');

2、根据nameaddress作为重复数据的字段条件

SELECT `name`,`address`,COUNT(*) AS '重复条数'  
FROM `test` 
GROUP BY `name`,`address` 
HAVING COUNT(*)>1

在这里插入图片描述

HAVING COUNT(*)>1 分组后将组内数据条数大于1的筛选出来

3、获取到重复数据的id集合

SELECT id FROM `test` a 
	WHERE (a.`name`,a.`address`) 
	IN (
		SELECT `name`,`address` FROM `test` 
		GROUP BY `name`,`address` 
		HAVING COUNT(*)>1
	)

在这里插入图片描述
4、从分组中取出每一组数据的一个最大或者最小id(最大、最小id对于聚合函数中的max和min)

SELECT MIN(`id`) 
FROM `test`
GROUP BY `name`,`address` 
HAVING COUNT(*)>1

在这里插入图片描述
5、查询出需要删除的数据

思路:表中数据的id属于重复字段中的id,但是又不是(最小和最大id),得到的id就是需要删除的数据

SELECT *  FROM `test` WHERE `id`  
	IN (SELECT id FROM `test` a WHERE (a.`name`,a.`address`) 
	
	IN (SELECT `name`,`address` FROM `test`
		GROUP BY `name`,`address` HAVING COUNT(*)>1)) 
	AND `id` NOT IN (SELECT MIN(`id`) FROM `test`GROUP BY `name`,`address` HAVING COUNT(*)>1)

在这里插入图片描述
6、将得到的数据进行删除

这里需要将得到的数据做为另一张表进行条件删除

DELETE FROM `test` WHERE `id`  IN (
	SELECT `id` FROM(
	
	SELECT *  FROM `test` WHERE `id`  
	IN (
		SELECT id FROM `test` a WHERE (a.`name`,a.`address`) IN 
		   (SELECT `name`,`address` FROM `test`
		    GROUP BY `name`,`address` HAVING COUNT(*)>1)
		) 
	AND `id` NOT IN (
		SELECT MIN(`id`) FROM `test`GROUP BY `name`,`address` HAVING COUNT(*)>1)
	)
	 AS a
)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下 SQL 语句删除重复数据保留一条: ``` DELETE t1 FROM 表名 t1, 表名 t2 WHERE t1.id > t2.id AND t1.字段名 = t2.字段名; ``` 其中,`表名` 为需要删除重复数据的表名,`字段名` 为用于判断重复的字段名,`id` 为表中的主键或唯一标识符。该 SQL 语句会将所有重复数据保留一条删除其余重复数据。 ### 回答2: 要删除重复数据保留一条,可以使用MySQL的DELETE语句和子查询来实现。 首先,可以使用如下的SELECT语句来查询出所有重复数据: SELECT col1, col2, ..., coln, COUNT(*) AS count FROM table_name GROUP BY col1, col2, ..., coln HAVING COUNT(*) > 1; 这个查询用于找到所有有重复数据的列,并通过GROUP BY和HAVING子句筛选出重复数据。 接下来,可以使用DELETE语句和子查询来删除重复数据,只保留一条: DELETE FROM table_name WHERE (col1, col2, ..., coln) NOT IN (SELECT col1, col2, ..., coln FROM table_name GROUP BY col1, col2, ..., coln HAVING COUNT(*) > 1); 这个DELETE语句会删除表中除了第一次出现的重复数据以外的所有重复数据。 注意,在使用这个方法之前,一定要先备份好数据,以免误删数据。 ### 回答3: 要删除MySQL中的重复数据保留一条,可以使用以下的步骤: 1. 首先,我们需要找出重复数据。可以使用GROUP BY和HAVING语句来找到重复数据。例如,假设我们要删除表中重复email字段,可以使用以下语句: SELECT email, COUNT(*) FROM table_name GROUP BY email HAVING COUNT(*) > 1; 这将返回所有重复的email及其重复的次数。 2. 根据找到的重复数据,我们可以选择保留其中的一条,并删除其他重复数据。可以使用DELETE语句来删除重复数据。例如,假设我们要保留COUNT(*)最大的那条数据,可以使用以下语句: DELETE FROM table_name WHERE email IN (SELECT email FROM table_name GROUP BY email HAVING COUNT(*) > 1) AND id NOT IN (SELECT MAX(id) FROM table_name GROUP BY email HAVING COUNT(*) > 1); 这将删除除了COUNT(*)最大的那条数据以外的其他重复数据。 3. 最后,我们可以再次运行第一步的查询语句来验证是否已成功删除重复数据。如果查询结果为空,说明已成功删除重复数据保留一条。 需要注意的是,执行此操作前请务必备份数据库,以防意外数据损失。另外,根据实际情况,可能需要针对具体的表和字段进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值