版权声明:本文为博主原创文章,欢迎分享转载。 https://blog.csdn.net/qq_29897369/article/details/83550550
前言
本来想的删除重复数据很简答的,没想到遇到麻烦了。可能自己的大意了,平时没有注意。废话不多说接着说一下删除重复数据的思路。
思路
首先自己表中有重复数据,通过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)