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

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

id from to time workbench_id
1 345 543 156456456 3
2 345 543 1564651156 3
3 543 345 1564661651 3

比如上表的数据中,我们认为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
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章