在群中偷学的时候发现一个问题,如果MySql表中有重复的字段,要删除这些重复字段改怎么做
MySql部分:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` int(11) DEFAULT NULL,
`user_name` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('6', '200');
INSERT INTO `user` VALUES ('5', '100');
INSERT INTO `user` VALUES ('4', '100');
INSERT INTO `user` VALUES ('3', '100');
INSERT INTO `user` VALUES ('2', '200');
INSERT INTO `user` VALUES ('1', '213');
创建user表之后,就是sql部分
# 1删除已经存在的临时表
drop TABLE if EXISTS user_copy;
# 2
create TABLE user_copy (select *,COUNT(DISTINCT user_name) as temp from `user` GROUP BY user_name);
# 3
delete from `user`;
# 4
insert into `user` (select user_id,user_name from user_copy);
# 5
drop TABLE if EXISTS user_copy;
1:删除已经存在的临时表
2:因为mysql中不支持select into建立临时表,那么就用create table来代替,其中的
COUNT(DISTINCT user_name) as temp
是因为需要用DISTINCT 限定需要去除重复的字段的原因,否则就是对所有字段去除重复,这个字段在临时表中不用管
GROUP BY user_name
是对你需要去除重复的部分的排序
3:删除要处理的表的部分
4:除了count子句的字段,其他的字段,都插入已经清空的表中
5: 删除临时表
处理前数据
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 5 | 100 |
| 6 | 200 |
| 4 | 100 |
| 3 | 100 |
| 2 | 200 |
| 1 | 213 |
+---------+-----------+
处理后数据
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 5 | 100 |
| 6 | 200 |
| 1 | 213 |
+---------+-----------+