Mysql移除重复记录实战

前言

这是一次mysql移除重复记录实战,想起来之前并没有share过,所以整理一下发上来大家参考。

假设有company表:

  • company_name+price为判断重复条件,也就是 group byhaving count(*)>1 的条件
  • 需要保留最大company_id(也就是移除最小company_id的记录)
  • 有些记录不止重复了一两条,可能上百条,多次执行移除重复记录,最后手工筛查过多重复的

实战记录

纯SQL,供参考。

1.软删除,使用duplicate_flag标记重复。

#############################
# Remove Duplicate
#   by zhengkai.blog.csdn.net
#############################
#check duplicate record , with count
  select max(u.unit_id),max(u.update_time),u.url,count(*),max(tender_name) from unit u
  where u.duplicate_flag=0
  group by u.tender_name
  having count(*)>1;
###start
insert into unit_delete (
  select max(u.unit_id),max(u.update_time),u.url,count(*),max(tender_name) from unit u
  where u.duplicate_flag=0
  group by u.tender_name
  having count(*)>1
);
#remove duplicate by table
update unit as u join unit_delete as ud on u.unit_id = ud.unit_id
set u.duplicate_flag=1 where u.duplicate_flag=0
;
select count(*) from unit u where u.duplicate_flag=1;
###end
  1. 旧版,硬删除,直接delete
########################################
# MYSQL之移除重复记录
# by zhengkai.blog.csdn.net
########################################

#查询重复数据
select max(u.company_name),max(u.price) from company u
GROUP BY u.company_name,u.price
HAVING count(*)>1;

#测试delete条件(使用不存在的值)
DELETE FROM company where `status`=5;

#开始移除重复
DELETE FROM company
WHERE company_id IN (
		SELECT
			dt.company_id
		FROM
			(
				SELECT
					MIN(x.company_id) AS company_id
				FROM
					company x
				GROUP BY
					x.company_name,x.price
					having count(*)>1
			) dt
	);

#一直移除不掉的重复记录手工排除
#(如果一直移除重复执行不尽,可能不止重复了一次,几次几十次上百次都有可能,建议手工看下)
select * from company u where u.company_name='xxx';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值