测试表cctest表结构为
CREATE TABLE `cctest` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`date` year(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
插入测试数据
truncate table cctest;
insert into cctest values (1,'cc',2019),(2,'cc',2019),(3,'cc',2019),(4,'cc',2020);;
1.查找表中多余的重复记录,重复记录是根据单个字段name来判断
select * from cctest where name in (
select name from cctest group by name
having count(1) > 1
)
删除重复记录保留最新的一条
delete from cctest where name in(
select * from(
select name from cctest group by name having count(1) > 1) t1)
and id not in(
select * from (
select MAX(id) from cctest group by name having count(1) > 1) t2);
2.查找表中多余的重复记录,重复记录是根据多个字段name,date来判断
select * from cctest where name in (
select name from cctest group by name,date
having count(1) > 1
)
删除重复记录保留最新的一条
delete from cctest where (name, date) in(
select t1.name,t1.date from (
select name,date from cctest group by name,date having count(1) > 1)t1)
AND id NOT IN (
select t2.maxid from(
select MAX(id) as maxid from cctest group by name,date having count(1) > 1)t2)