Doppelte Datensätze aus der Datenbank löschen?!?!?

Post Reply
Message
Author
michael puh

Doppelte Datensätze aus der Datenbank löschen?!?!?

#1 Post by michael puh »

hallo,

ich stehe vor dem problem alle doppelten einträge in einer datenbank zu löschen.
der primary key ist zwar immer verschieden, aber es kam vor, das hin und wieder ein daten-
satz ein zweites mal hinzugefügt wurde...
mit distinct kann ich doppelte einträge unterdrücken, aber ich brauche genau das gegenteil...

danke, falls jemand helfen kann...

mih

Re: Doppelte Datensätze aus der Datenbank löschen?!?!?

#2 Post by mih »

moin,

ganz einfach: tabelle(n) entladen, index erstellen, tabelle(n) neu laden, fertig.

btw: um was für 'ne db handelt es sich?

michael puh

Re: Doppelte Datensätze aus der Datenbank löschen?!?!?

#3 Post by michael puh »

hi, danke erstmal,

es handelt sich um oracle. was meinst du mit entladen, index erstellen, neu laden?

(bin absoluter db-neuling, also bitte so als ob ich vier jahre alt wäre <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">)
bye

mih

Re: Doppelte Datensätze aus der Datenbank löschen?!?!?

#4 Post by mih »

tach auch,

hm, oracle kenn' ich nicht. bei "richtigen" datenbanken (DB2) geht's mit DSNTEP.

als neuling/anfänger aber nicht unbedingt zu empfehlen. man könnte auch 'n kleines programm/script (spufi?) schreiben, das diesen job erledigt, ist allerdings um den faktor 10 bis 15 langsamer.

die sinnvollste methode scheint mir folgende zu sein: den dbadmin fragen, ob er diesen job erledigen kann. geht garantiert am schnellsten und ist am sichersten.

Descartes

Re: Doppelte Datensätze aus der Datenbank löschen?!?!?

#5 Post by Descartes »

Ein Fall für <a href="http://www.iks-jena.de/mitarb/lutz/usen ... ml#Doppelt" target="_blank"><!--auto-->http://www.iks-jena.de/mitarb/lutz/usen ... <!--auto--> aus de.comp.datenbanken.misc

Wie verhindere und lösche ich doppelte Einträge?

Ein UNIQUE Constraint, wie er in einem primary Key automatisch mit erzeugt wird, verhindert diese Einträge von vorne herein.

Angenommen die Tabelle tab enthält die Felder f1 und f2. Beide zusammen sollen ein Key für die Datensätze sein. CREATE UNIQUE INDEX nix_doppelt ON tab(f1, f2) erstellt einen Constraint. Ist das Problem schon passiert so gibt es zwei Möglichkeiten:

Möglichkeit 1:
CREATE TEMPORARY TABLE xxx AS SELECT DISTINCT * FROM tab;
und dann Rückkopieren des Datenbestandes. Dies ist nicht im laufenden Betrieb möglich!

Möglichkeit 2:
DELETE FROM tab WHERE EXISTS (SELECT * FROM tab t WHERE t.f1 = tab.f1 AND t.f2 = tab.f2 AND t.oid < tab.oid);
wobei hier ein automatischer primary Key der Datenbank benutzt wurde. Wie das heißt, ist der Dokumentation zu entnehmen.

michael puh

Re: Doppelte Datensätze aus der Datenbank löschen?!?!?

#6 Post by michael puh »

danke für die antworten...

select id, count(id) from tbl_x group by customerid having count(id)>1;

hat hervorragende dienste geleistet.

Post Reply