云服务器 99 / 年,新老同享(可以99/年续费),开发者力荐特惠渠道,新客户在享受9折
阿里云推广

如何删除mysql表中字段值重复的记录id小的值只保留id最大的一条记录值

  • 内容
  • 评论
  • 相关

mysql表:

 

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

 

-- ----------------------------

-- Table structure for test

-- ----------------------------

DROP TABLE IF EXISTS `test`;

CREATE TABLE `test`  (

  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,

  `order_sn` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `order_sn_son` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `clientkeynum` int(11) NULL DEFAULT NULL,

  `is_del` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

  PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

 

-- ----------------------------

-- Records of test

-- ----------------------------

INSERT INTO `test` VALUES (1, '1001', '1', 1, '1', '哈哈');

INSERT INTO `test` VALUES (2, '1001', '1', 1, '1', '呵呵呵');

INSERT INTO `test` VALUES (3, '1002', '1', 1, '1', '嘿嘿');

INSERT INTO `test` VALUES (4, '1003', '2', 1, '1', '嘎嘎');

INSERT INTO `test` VALUES (5, '1003', '4', 1, '1', '狗狗');

INSERT INTO `test` VALUES (6, '1004', '5', 1, '1', '你好');

INSERT INTO `test` VALUES (7, '1004', '5', 1, '1', '我好');

INSERT INTO `test` VALUES (8, '1004', '5', 1, '1', '他好');

 

SET FOREIGN_KEY_CHECKS = 1;

 

 

 

上表中两个字段值order_sn以及order_sn_son同时重复的结果是1,2以及6,7,8,最终实现去掉1,6,7行。

 

 

select * from test where  clientkeynum='1' and  id not in(select max(id) as id from test group by order_sn,order_sn_son having count(order_sn)>0);

 

 

分析处理过程:根据order_sn,order_sn_son两列分组找到两个字段值重复大于0的最大id

select max(id) as id from test group by order_sn,order_sn_son having count(order_sn)>0;

得到的是2,3,4,5,8。这里大于0包含两个值相同只有一条记录的,以及两个值相同有多个记录的。取出来里面最大的id的话,包含有一条记录的以及多条记录里面最大的。这就是我们要保留的值。

上面例子是保留最后一条记录也就是最大值,也可以保留两个字段相同的最小记录。把max改成min。上面例子是两个字段同时重复,当然也可以只判断一个字段 group by里面只保留一个字段。

本文标签:

版权声明:若无特殊注明,本文皆为《菜鸟站长》原创,转载请保留文章出处。

本文链接:如何删除mysql表中字段值重复的记录id小的值只保留id最大的一条记录值 - https://wlphp.com/?post=367

发表评论

电子邮件地址不会被公开。 必填项已用*标注