1. 程式人生 > >mysql 刪除重複資料詳細步驟

mysql 刪除重複資料詳細步驟

前言

本來想的刪除重複資料很簡答的,沒想到遇到麻煩了。可能自己的大意了,平時沒有注意。廢話不多說接著說一下刪除重複資料的思路。

思路

首先自己表中有重複資料,通過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)

結果

在這裡插入圖片描述在這裡插入圖片描述