mysql中数据查重以及重复数据删除

本文介绍了一种通过SQL查询和删除重复数据库记录的方法,特别关注于使用CONCAT函数组合唯一标识符,以确保数据的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候 业务功能出现了问题,最后发现是数据有问题,此时我们需要进出现问题的数据查询出来,并根据查询的结果将重复数据进行处理。
举一个列子,有如下数据

idfromtotimeworkbench_id
13455431564564563
234554315646511563
354334515646616513

比如上表的数据中,我们认为fromto以及workbench_id一样的数据只能有一条,从业务上来说,由这三个字段确定一条唯一的数据,此时我们需要将数据库中类似id为1和2这种不合法的数据给清除掉。首先我们需要将不合法的数据查询出来,查询语句如下

SELECT
	* 
FROM
	(
		SELECT *, CONCAT( `from`, `to`, workbench_id) AS  fromToWorkbenchid
		FROM chat_session 
	) t 
WHERE
	t.fromToWorkbenchid IN (
		SELECT	tt.fromToWorkbenchid
		FROM (
				SELECT *, CONCAT( `from`, `to`, workbench_id ) AS fromToWorkbenchid
				FROM 	chat_session 
			 ) tt 
	     GROUP BY    fromToWorkbenchid
		 HAVING     count( fromToWorkbenchid ) > 1 
	);

实际上就是将这三个字段使用CONCAT链接起来作为一个新的字段使用,之后在此基础上进行下一步的查询。

要删除数据也是类似于上面的思路:

DELETE FROM chat_session 
WHERE id NOT IN
(
	SELECT maxid 
	FROM (
				SELECT MAX(id) AS maxid, CONCAT(from, to, workbench_id) 
				AS fromToWorkbenchid
				FROM chat_session 
				GROUP BY 	fromToWorkbenchid
	) t
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值