2013-08-16 3 views
1

MySQL 데이터베이스에서 테이블의 중복 레코드를 제거하고 싶습니다. 그 이미지 ID를 enter image description heremysql db에서 중복 (필드) 항목을 제거하는 방법은 무엇입니까?

는 자동 증가하지만 내가 고유을 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

당신은 단지 더 높은 ID로 중복을 찾기 위해 LEFT JOIN을 사용하여 삭제할 수 있습니다,이 문을 실행할 수 있습니다;

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

덕분에 무작위로 사람들로부터 삭제합니다. –