2016-05-26 17 views
1

Ich versuche, doppelte Zeilen aus meiner Datenbank zu löschen, die die gleiche "Eingabe" -Spalte und "Antwort" -Spalte hat. Gerade jetzt, ich habe eine Abfrage, die alle Duplikate SELECT, aber ich bin nicht sicher, wie die Abfrage zu schreiben, um die Duplikate zu löschen:Löschen doppelter Zeilen mit zwei spezifischen Spalten-Duplikaten

SELECT * , COUNT(*) AS matches 
FROM allData 
GROUP BY input, response 
HAVING matches > 1 

Wenn ich die DELETE-Abfrage ich schreibe, denke ich, es würde etwas wie

DELETE FROM allData WHERE blah = blah 

^--- Aber das ich das ‚count (*)‘ nicht auswählen oder ‚Gruppe‘, so dass ich bin nicht wirklich sicher, wie man richtig schreiben. Jede Hilfe wäre großartig.

+0

Was ist Ihr Primärschlüssel? –

Antwort

1

Try this;)

DELETE 
    T1 
FROM allData T1 
INNER JOIN (
    SELECT input, response 
    FROM allData 
    GROUP BY input, response 
    HAVING COUNT(1) > 1 
) T2 ON T1.input = T2.input AND T1.response = T2.response 

Edited:

DELETE T1 
FROM allData T1 
INNER JOIN allData T2 ON T1.input = T2.input AND T1.response = T2.response AND T1.id > T2.id 

Dies wird der Datensatz bleiben, die die minimale ID hat. Und werfen Sie einen Blick auf Delete all duplicate rows except for one in mysql.

+0

Nein. Dies löscht ALLE Zeilen, die Duplikate von sich selbst haben. – frosty

+0

Ich muss ein Original nicht gelöscht lassen. – frosty

+0

Gut, dass ich dies auf einem Testtisch zuerst versucht ... lol – frosty

Verwandte Themen