[mysql] 删除重复数据
删除多余的重复记录(多个字段),只保留最小id的记录
重复记录可能有多条,但是我们只希望保留id最小的那条记录,因为学号和姓名均重复的只有id为1、6的记录,保留id为1的记录,那么验证一下查询的数据是否正确
-- 删除多余的重复记录(多个字段),只保留最小id的记录
DELETE FROM student WHERE id IN (
SELECT * FROM (
SELECT id FROM student WHERE (stuno,stuname) -- 注意:此处一定要加括号,当成联合字段来处理
IN (
-- 查找学号和姓名均重复的学生信息
SELECT stuno,stuname FROM student GROUP BY stuno,stuname HAVING COUNT(1) > 1
) AND id NOT IN (
-- 查询最小id的记录
SELECT MIN(id) FROM student GROUP BY stuno,stuname HAVING COUNT(1) > 1
)
) AS stu_repeat_copy
);