找准目标,不断前行

MYSQL 删除表中重复数据

CREATE TABLE `test` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `dept` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('1', 'zzz', '测试1');
INSERT INTO `test` VALUES ('2', 'www', '测试1');
INSERT INTO `test` VALUES ('3', 'fff', '测试1');
INSERT INTO `test` VALUES ('4', 'zzz', '测试1');
INSERT INTO `test` VALUES ('5', 'www', '测试1');
INSERT INTO `test` VALUES ('6', 'fff', '测试1');
INSERT INTO `test` VALUES ('7', 'test', '测试1');
INSERT INTO `test` VALUES ('8', 'test', '测试1');
INSERT INTO `test` VALUES ('9', 'test1', '测试1');

  可以看到上述表中id为4,5,6,8 是完全重复的数据,我们需要删除这些数据,我的逻辑是什么呢,就是每条数据分组后 取 id 最小的 那个 留下来,其余的进行删除

SQL如下:

DELETE
FROM
    test
WHERE
    id NOT IN (
        SELECT
            t.id
        FROM
            (
                SELECT
                    min(id) id
                FROM
                    test
                GROUP BY
                    NAME
                HAVING
                    count(1) > 0
                ORDER BY
                    id
            ) t
    )

 

posted @ 2020-09-04 09:59  kevinZhuZhu  阅读(445)  评论(0编辑  收藏  举报