Search K
Appearance
👇公众号👇---👇 微信 👇
有缘人请我喝杯咖啡吧
👇 微信 👇---👇支付宝👇
Appearance
TIP
MySQL中经常会遇到重复的数据,那么当我们遇到重复的时候的时候,如果定位哪些数据是有重复的记录?如何删除重复的数据?我们该怎么做呢?接下来我们一步步来分析一下遇到这样的情况后,该如何处理
CREATE TABLE `test_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '姓名',
`mobile` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '手机号',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `test_user` (`id`, `username`, `mobile`) VALUES
(1, '张三', '13888888886'),
(2, '李四', '13888888887'),
(3, '王五', '13888888888'),
(4, '赵六', '13888888889'),
(5, '张三', '13888888886'),
(6, '李四', '13888888887'),
(7, '王五', '13888888888'),
(8, '王五', '13888888888'),
(9, '老七', '13888888889');
id | username | mobile |
---|---|---|
1 | 张三 | 13888888886 |
2 | 李四 | 13888888887 |
3 | 王五 | 13888888888 |
4 | 赵六 | 13888888889 |
5 | 张三 | 13888888886 |
6 | 李四 | 13888888887 |
7 | 王五 | 13888888888 |
8 | 王五 | 13888888888 |
9 | 老七 | 13888888889 |
-- 方法二(推荐方法也容易理解)
DELETE FROM test_user WHERE id NOT IN (
SELECT t.min_id FROM (
-- 过滤出重复多余的数据,比如,如果所有记录中存在1条记录是username=张三的,那么就取出它;
-- 如果所有记录中存在多条记录是username=老七的,那么只取其中1条,其他的不查询出来
SELECT MIN(id) AS min_id FROM test_user GROUP BY username
) t
)
id | username | mobile |
---|---|---|
1 | 张三 | 13888888886 |
2 | 李四 | 13888888887 |
3 | 王五 | 13888888888 |
4 | 赵六 | 13888888889 |
9 | 老七 | 13888888889 |