• 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
            )
  • 相关阅读:
    Linux监控内核SNMP计数器
    wireshark使用手册
    【LinuxShell】echo用法详解
    【Coredump】调试之旅
    汇编指令
    从零开始学Java (五)条件选择
    从零开始学Java (四)输入输出
    Dart基础
    树相关
    递归简介
  • 原文地址:https://www.cnblogs.com/menglong1108/p/12942407.html
Copyright © 2020-2023  润新知