Ich habe eine MySQL-Tabelle mit jeder Zeile mit 20 Feldern. Unter anderem hat:Wie behalte ich eine Zeile und entferne Duplikate in mysql?
table: origin, destination, date, price
Jetzt möchte ich alle Zeilen zu entfernen, die doppelte sind in Bezug auf nur einen Satz von bestimmten Bereichen: origin, destination, date
.
Ich habe versucht:
delete from mytable where id not in
(select id from (
SELECT MAX(p.id) as id from mytable p group by p.origin, p.destination, p.date
) x)
Problem: diese Zeilen mit den höchsten id
behält (Mittel: zuletzt hinzugefügten).
Stattdessen möchte ich nur die Zeile behalten, die den niedrigsten Preis hat. Aber wie?
Hinweis: Ich kann keinen eindeutigen Index hinzufügen, da die Tabelle für Masseneinfügungen von LOAD DATA
verwendet wird und keine Fehler ausgegeben werden sollten. Zum Zeitpunkt der Belastung weiß ich nicht, welche Zeile der "Bestpreis" ist.
Auch würde ich keine zusätzlichen oder temporären Tabellen einführen wollen, die eins zu anderem kopieren. Ändern Sie einfach die vorhandene Tabelle.
Gibt es einen Unterschied zu 'select * from yourtable a, b WHERE ... yourtable', dann ist dies genau das gleiche? – membersound
Und wichtiger: Was ist, wenn "t1.price = t2.price"? Dann würden beide Zeilen behalten, aber ich würde immer noch einen von ihnen entfernen wollen. Könnte ich besser machen als die Einträge mit kleinerer ID zu entfernen? '... und (t1.price> t2.price ODER (t1.price = t2.price UND t1.id
membersound
@membersound Tabellen mit Komma zu verbinden ist eine alte Methode, aber natürlich hier , es hat das gleiche Ergebnis zwischen 'inner join' mit', '. – Blank