mysql 删除重复数据 保留1条
2021/7/13 19:11:49
本文主要是介绍mysql 删除重复数据 保留1条,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
创建测试表:
CREATE TABLE `animal` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) COLLATE utf8_bin DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; INSERT INTO `boot`.`animal` (`id`, `name`, `age`) VALUES ('1', 'cat', '12'); INSERT INTO `boot`.`animal` (`id`, `name`, `age`) VALUES ('2', 'dog', '13'); INSERT INTO `boot`.`animal` (`id`, `name`, `age`) VALUES ('3', 'camel', '25'); INSERT INTO `boot`.`animal` (`id`, `name`, `age`) VALUES ('4', 'cat', '32'); INSERT INTO `boot`.`animal` (`id`, `name`, `age`) VALUES ('5', 'dog', '42');
1.查看重复name及条数
SELECT NAME, count(1) FROM animal GROUP BY NAME HAVING count(1) > 1;
直接删除:
DELETE -- select * FROM animal WHERE NAME IN ( SELECT NAME FROM animal GROUP BY NAME HAVING count(1) > 1 )
会报错 [Err] 1093 - You can't specify target table 'animal' for update in FROM clause
不能先select出同一表中的某些值,再update这个表(在同一语句中)
原因是:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不支持这种更新查询同一张表的操作
2.解决办法:把要删除的数据查询出来做为一个第三方表,然后再删除。
DELETE -- select * FROM animal WHERE NAME IN ( SELECT t.NAME FROM ( SELECT NAME FROM animal GROUP BY NAME HAVING count(1) > 1 ) t )
3.删除表中删除重复数据,仅保留一条
通过name分组,查出id最小的数据,这些数据就是要留下,那么再查询出id不在这里面的,就是要删除的重复数据。
DELETE -- SELECT * FROM animal WHERE id NOT IN ( SELECT t.id FROM ( SELECT MIN(id) AS id FROM animal GROUP BY `name` ) t )
这篇关于mysql 删除重复数据 保留1条的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Mysql安装教程:新手必看的详细安装指南
- 2024-11-18Mysql安装入门:新手必读指南
- 2024-11-18MySQL事务MVCC原理入门详解
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南