[mysql] 删除重复数据,只保留一条

需求:

业务表有脏数据了,很多重复数据,导致报错
现要将重复数据都删掉,只留一条

实现:

1、搞一张表,模拟数据
[mysql] 删除重复数据,只保留一条_第1张图片

想要的结果:panda留一条、kongfu留一条

2、思路:

1、分组,将重复数据查出来
2、通过id区分,留id最小的一条
3、删除,刨除id最小的一条

3、脚本:

DELETE
FROM
	panda_test
WHERE
	panda_name IN (
		SELECT
			panda_name
		FROM
			(
				SELECT
					panda_name
				FROM
					panda_test
				GROUP BY
					panda_name
				HAVING
					count(1) > 1
			) t
	)
AND id NOT IN (
SELECT
	id
FROM
	(
		SELECT
			min(id) AS id
		FROM
			panda_test
		GROUP BY
			panda_name
		HAVING
			count(1) > 1
	) dt
)

4、结果
[mysql] 删除重复数据,只保留一条_第2张图片

你可能感兴趣的:(oracle,sql,mysql,删除重复数据,保留一条)