mysql删除重复行

Posted 听风1108

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql删除重复行相关的知识,希望对你有一定的参考价值。

创建表

CREATE TABLE `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

插入数据,其中“橘子”和“苹果”各有一个重复行

INSERT INTO `products` VALUES (5, \'橘子\', 100.00);
INSERT INTO `products` VALUES (6, \'橘子\', 100.00);
INSERT INTO `products` VALUES (7, \'苹果\', 50.00);
INSERT INTO `products` VALUES (8, \'苹果\', 50.00);
INSERT INTO `products` VALUES (9, \'香蕉\', 80.00);

删除重复行

DELETE 
    FROM
        products p1 
    WHERE
        p1.id < (
        SELECT
            max_id 
        FROM
            ( SELECT max( p2.id ) max_id FROM products p2 WHERE p1.NAME = p2.NAME AND p1.price = p2.price ) AS a 
        )

注意红色高亮部分写法,由于mysql不支持在自查询中执行update操作,需select 的结果再通过一个中间表select一次。否则会出现如下错误

You can\'t specify target table \'p1\' for update in FROM clause

或者使用如下方式删除

    DELETE FROM products p1
    WHERE EXISTS (
            SELECT id from (
                SELECT id  FROM products p2
                    WHERE p1.name = p2.name
                        AND p1.price = p2.price
                        AND p1.id < p2.id
                    ) as a
        )

 

以上是关于mysql删除重复行的主要内容,如果未能解决你的问题,请参考以下文章

mysql删除完全重复行,求教

从 mysql 表中检索所有行,但首先将它们分组以删除重复

从 mySQL 数据库中删除列重复的重复行

MYSQL去重并删除数据最少的重复行

删除 MySQL 中的重复行

删除 MySQL 中的重复行