MySQL删除重复数据保留1条

测试表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)

猜你喜欢

转载自blog.csdn.net/u014609263/article/details/90378991