省流:
xxx是表名。name是有重复值的字段(即列名)。 id是自增,id越大,说明创建时间越近。
delete from t1 using xxx as t1, xxx as t2
where t1.name = t2.name and t1.id < t2.id;
正文:
案例如下
一、建表
CREATE TABLE `emp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=0
二、造数据
INSERT INTO emp
(name, update_time)
VALUES
('张三', '2023-09-06 00:00:00'),
('张三', '2023-09-06 00:00:00'),
('张三', '2023-09-06 00:00:00'),
('李四', '2023-09-06 00:00:00'),
('李四', '2023-09-06 00:00:00'),
('王五', '2023-09-06 00:00:00');
结果:
id|name|update_time |
--+----+-------------------+
1|张三 |2023-09-06 00:00:00|
2|张三 |2023-09-06 00:00:00|
3|张三 |2023-09-06 00:00:00|
4|李四 |2023-09-06 00:00:00|
5|李四 |2023-09-06 00:00:00|
6|王五 |2023-09-06 00:00:00|
三、查询(将重复的数据查出来)
1.查出重复的名字
-- 查出重复的数据 重复的名字是哪个
select name from emp group by name having count(1)>1;
结果:
name|
----+
张三 |
李四 |