mysql 刪除重複資料詳細步驟
阿新 • • 發佈:2019-01-23
前言
本來想的刪除重複資料很簡答的,沒想到遇到麻煩了。可能自己的大意了,平時沒有注意。廢話不多說接著說一下刪除重複資料的思路。
思路
首先自己表中有重複資料,通過select 查詢到自己有哪些是重複資料。
select from tb_user
1、通過count() 查出 大於一得就是重複的資料
SELECT user_name FROM tb_user GROUP BY user_name HAVING COUNT(*) > 1
2、獲取重複的user_id
SELECT user_id FROM tb_user WHERE user_name IN (SELECT user_name FROM tb_user GROUP BY user_name HAVING COUNT(*) > 1)
3、比如drj 這user_name 重複資料有三條 我只需要留下user_id 最小的也就是隻留下一條資料。
SELECT user_id FROM tb_user WHERE user_id IN (SELECT user_id FROM tb_user WHERE user_name IN (SELECT user_name FROM tb_user GROUP BY user_name HAVING COUNT(*) > 1 ) AND user_id NOT IN (SELECT MIN(user_id) FROM tb_user GROUP BY user_name HAVING COUNT(*) > 1 ) )
4、發現查詢可以 但是刪除不可以。如圖:
原因
更新資料時使用了查詢,而查詢的資料又做了更新的條件,mysql不支援這種方式
解決
在之前再加一層封裝
DELETE FROM tb_user WHERE user_id IN( SELECT a.user_id FROM ( SELECT user_id FROM tb_user WHERE user_name IN (SELECT user_name FROM tb_user GROUP BY user_name HAVING COUNT(*) > 1 ) AND user_id NOT IN (SELECT MIN(user_id) FROM tb_user GROUP BY user_name HAVING COUNT(*) > 1 ) ) AS a)