样表:

 


CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT '',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;


 

插入数据

 

INSERT INTO `test` (`name`) VALUES ('aa');
INSERT INTO `test` (`name`) VALUES ('bb');
INSERT INTO `test` (`name`) VALUES ('bb');
INSERT INTO `test` (`name`) VALUES ('cc');
INSERT INTO `test` (`name`) VALUES ('cc');
INSERT INTO `test` (`name`) VALUES ('cc');

 

 

假如要按 name 字段分组后有重复的记录保留最大id的数据

实现思路:

  1. 创建临时表,存放要删除的id
  2. 将分组后最小的id找出来,存在临时表
  3. 联表删除
  4. 重复第2、3步,直到影响行数为0

 

实现方法:

创建临时表

 

CREATE TABLE `delid` (
  `id` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

执行删除:

 


#查询最小id
INSERT into delid select min(id) from test GROUP BY name HAVING count(*) >1;
#关联删除
DELETE FROM test where id in(select id from delid);
#清空临时表
truncate table delid;

 

点赞(3028) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部