Mysql: Duplikate entfernen
toby
- datenbank
moin.
wie kann ich (im nachhinein) alle duplikate, also wenn 2 datensätze bei einem bestimmten feld den selben wert haben, entfernen?
danke
Hi,
kommt darauf an, ist es (a) egal welcher der beiden Sätze überlebt und (b) unterscheiden sich die Sätze in einer bestimmten Spalte?
Wenn ja, dann könnte man (Subselects vorausgesetzt), ein Delete absetzen, dass alle Datensätze löscht, die bei Gruppierung nach der "doppelten" Spalte zwei Vorkommen aufweisen. Das Problem ist nach der Gruppierung die unterschiedliche Spalte rauszuholen, bei Zahlen wäre es optimal, da könnte man MAX oder MIN verwenden, so a la
DELETE FROM xyz
WHERE unterschiedliches_zahlenfeld IN
(
SELECT MIN(unterschiedliches_zahlenfeld), gleiches_feld
FROM xyz
GROUP BY gleiches_feld
HAVING COUNT(*) > 1
)
MfG
Rouven
yo,
DELETE FROM xyz
WHERE unterschiedliches_zahlenfeld IN
(
SELECT MIN(unterschiedliches_zahlenfeld), gleiches_feld
FROM xyz
GROUP BY gleiches_feld
HAVING COUNT(*) > 1
)
das ist eine hübsche falle, weil sich die DELETE bedingung nicht nach einer eindeutigen spalte (primary key) richtet. werte, die in der einen gruppierung durch den subselect ausgewählt werden, werden in den IN Operator mit aufgenommen und können somit auch bei allen anderen datensätze zu treffern führen, was sicherlich nicht gewollt ist. oder mit anderen worten, die zusammengehörigkeit in der unterabfrage durch das GROUP BY wird in der DELETE WHERE bedingung wieder aufgehoben.
ich würde erst mal fragen, wie den die tabellenstruktur aussieht.
Ilja
Hallo,
ich würde erst mal fragen, wie den die tabellenstruktur aussieht.
... und wieso diese nicht verhindert das überhaupt Duplikate angelegt werden können.
Grüße
Klaus