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