2013-08-16 50 views
1

我想刪除MySQL數據庫中表的重複記錄。 enter image description here如何從MySQL數據庫中刪除重複(字段)條目?

在這種圖像ID自動遞增,但我想customer_invoice_id唯一的,但是要刪除重複記錄。 E.G我想刪除1104條記錄,但是現在我刪除了1105這是該查詢的最新記錄。

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

回答

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

您可以直接刪除使用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

一如往常,備份您的數據運行更新前/從隨機的人上網:)

+0

由於它工作得上刪除。 –