如何从mysql数据库中删除重复(字段)条目?

时间:2013-08-16 09:53:48

标签: php mysql duplicate-removal duplicate-data unique-index

我想删除MySQL数据库中表的重复记录。 enter image description here

在该图片ID中是自动增量,但我希望 customer_invoice_id 唯一,但想要删除重复记录。 E.G我想删除1104记录,但现在我删除1105这是该查询的最新记录。

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

2 个答案:

答案 0 :(得分: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)

演示,

答案 1 :(得分: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

An SQLfiddle to test with

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