2016-04-28 7 views
0

Ich habe eine Tabelle, die doppelte Werte in einer Spalte hat, Titel, so dass die Titelspalte mehrere Zeilen mit den gleichen Werten hat.Wie kann ich alle Zeilen mit Duplikaten in einer Spalte mit MySQL löschen?

Ich möchte alle Duplikate löschen mit Ausnahme einer, wo der Titel derselbe ist.

Welche Art von Abfrage kann ich ausführen, um dies zu erreichen?

Title  Subject    Description    Created_at 
Something Somethingsubject Somethingdescription  2016-04-13 16:37:10 
Something Anothersubject  Anotherdescription   2016-04-11 16:37:10 
Something Thirdsubject  Thirdsubject    2016-04-14 16:37:10 
NumberTwo NumberTwoSubject NumberTwoSubject   2016-04-12 16:37:10 
NumberTwo AnotherNumberTwo AnotherNumberTwoDescripti 2016-04-15 16:37:10 

Ich möchte alle Duplikate löschen, nur eine verlassen, vorzugsweise die älteste Datensatz, so dass der einzigen verbleibenden Datensätze würde:

Title  Subject   Description   Created_at 
Something Anothersubject  Anotherdescription 2016-04-11 16:37:10 
NumberTwo NumberTwoSubject NumberTwoSubject  2016-04-12 16:37:10 

Antwort

8

Sie können tun, selbst beitreten DELETE:

DELETE t1 
FROM mytable t1 
JOIN (SELECT Title, MAX(Created_at) AS max_date 
     FROM mytable 
     GROUP BY Title) t2 
ON t1.Title = t2.Title AND t1.Created_at < t2.max_date 

Demo here

1

eine Sicherung zuerst tun, aus offensichtlichen Gründen, aber dies sollte funktionieren:

delete from your_table where id not in (select id from your_table group by title) 

Wo id ist die Spalte, die den Primärschlüssel für your_table

speichert
+0

Mindestens Sie die „so dass nur eine, vorzugsweise die älteste Aufzeichnung“ nicht gelöst haben Anforderung. Plus was, wenn kein "id" da ist. –

+0

Kein Zweifel, Sie können immer eine viel bessere Lösung präsentieren –

+0

Sorry Mann bedeutete keine Straftat. Ich habe versucht, die Antwort zu verstehen. –

-1
DELETE * FROM table WHERE Title ="Something" and Subject <> "Somethingsubject" 

in einigen Versionen von SQL nicht gleich <> ist =

+1

Diese Antwort ist ... sehr interessant. –

+0

@EthanF. Ich stimme zu, diese Antwort wird auf jeden Fall eine Sicherheit für den Arbeitsplatz bieten, weil die Arbeit in der Zukunft so lange dauern wird, bis Ihr Vorgesetzter sie liest –

0

Ergebnisse Meine Idee ist, in den Export neue Tabelle. Dann ersetzen Sie das alte durch das neue. Vorteile sind 1. Sie können überprüfen, ob die Ergebnisse das sind, was Sie wollen. 2. Sie nicht verlieren Originaldaten

create table new_mytable select * from (select * from mytable order by created_at) as b group by b.title 
Verwandte Themen