1

我想删除 MySQL 数据库中表的重复记录。 在此处输入图像描述

在该图像中,id 是自动递增的,但我希望customer_invoice_id是唯一的,但想删除重复的记录。EG 我想删除 1104 记录,但现在我删除了 1105,这是此查询的最新记录。

ALTER IGNORE TABLE table ADD UNIQUE KEY idx1(customer_invoice_id); 
4

2 回答 2

2

在设置约束之前,请先手动删除。

DELETE  a
FROM    tableName a
        LEFT JOIN
        (
            SELECT  customer_invoice_id, MAX(id) id
            FROM    tableName 
            GROUP   BY customer_invoice_id
        ) b ON  a.customer_invoice_id = b.customer_invoice_id AND
                a.id = b.id
WHERE   b.customer_invoice_id IS NULL

这将保留每个customer_invoice_id. 你现在可以执行这个语句,

ALTER TABLE tableName ADD UNIQUE KEY idx1(customer_invoice_id)

演示,

于 2013-08-16T09:57:27.167 回答
1

您可以使用 LEFT JOIN 删除以查找具有更高 id 的重复项;

DELETE i1 
FROM invoices i1
LEFT JOIN invoices i2
  ON i1.customer_id = i2.customer_id 
 AND i1.customer_invoice_id = i2.customer_invoice_id
 AND i1.id < i2.id
WHERE i2.customer_invoice_id IS NOT NULL

一个用于测试的 SQLfiddle

与往常一样,在从 Internet 上随机更新/删除数据之前备份您的数据 :)

于 2013-08-16T10:00:52.433 回答