Laden...

Doppelte Einträge löschen?

Erstellt von Paulo vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.239 Views
P
Paulo Themenstarter:in
172 Beiträge seit 2005
vor 15 Jahren
Doppelte Einträge löschen?

verwendetes Datenbanksystem: SQL Server 2005

Hi,

ich hab ein Feld "Name". Nun sind einige Rows in der Tabelle mit dem selben Namen. Ich würde gern alle Duplikate bis auf einen Eintrag löschen.

Weiß jemand eine Query für sowas?

Viele Grüße,
Paulo

3.430 Beiträge seit 2007
vor 15 Jahren

Hi,

das wird ein ziemlich großer Aufwand.
Bestenfalls sollte man schon vorher solche Situationen vermeiden, indem man prüft ob es den Eintrag schon gibt.

schaue dir mal das hier an: http://support.microsoft.com/kb/139444/de
Wenn das nicht hilft, dann einfach nach "Ms SQL doppelten Einträge löschen" googeln.

Gruss
Michael

R
33 Beiträge seit 2008
vor 15 Jahren

viel arbeit??

nimms mir nicht über aber wenn mans richtig ansetzt kann es nur je nach db lange dauern bis er berechnet ist aber ansonsten:

nen Sqlcommandexecute Reader erstellen
alle spalten auslesen und speichern, beim speichern fragen ob in einem alles-string(wo alle datensätze drin sind) mit IndexOf der Datensatz schon existiert wenn ja kommt er nicht rein

wenn du durch bist einfach Delete all, dann einfach den "allesstring" wieder entpacken und per inserts rein in die db

fand ich nicht alzu aufwändig, man muss nur bisschen tippen aber schätze nicht mehr als 50 zeilen

J
1.114 Beiträge seit 2007
vor 15 Jahren

das wird ein ziemlich großer Aufwand.

Wieso Aufwand... Das geht mit einem SQL Befehl... So in dieser Art mittels eines Self join. Damit hast du zumindest schon mal die doppelten gefunden.

Bestenfalls sollte man schon vorher solche Situationen vermeiden, indem man prüft ob es den Eintrag schon gibt.

Nöö, die Meinung teil ich aber absolut nicht. Es ist nicht an deiner Software zu prüfen, ob es den Eintrag schon gibt, sondern an der Datenbank solche fehlerhaften Insert direkt mit einer Exception zu quittieren (Unique Constraint). Alles andere führt nämlich dann genau zu den Problemen, die in vielen Datenbanken herrschen, weil eben keine Constraints gescheit gesetzt sind. Und bei der erst besten Gelegenheit friemelt irgendeiner, der meint er kennt sich aus, an deinen Daten rum, und schon ist deine Datenkonsitenz flöte.... Also bitte: Solche Dinge immer unbedingt direkt auf unterster Ebene abwickeln, und das ist nunmal die Datenbank.

3.430 Beiträge seit 2007
vor 15 Jahren

Hallo raketenfred,

viel arbeit??

Ok, so groß ist der Aufwand nun auch wieder nicht, aber...

Paulo hat nach einer Query für das Löschen der Doppelten Einträge gefragt:

Weiß jemand eine Query für sowas?

Wie du beschrieben hast würdest du die DAten aus der DB laden im Programm bearbeiten und wieder zurück in die DB schreiben.
Das ist sicherlich nicht viel Aufwand, aber es kann unter Umständen sehr lange dauern.

Das Beispiel das ich gepostet habe macht alles direkt in der DAtenbank, d.h. die Daten müssen nicht in das Programm geladen werden um sie zu bearbeiten.

Gruss
Michael

R
33 Beiträge seit 2008
vor 15 Jahren

solange stecke ich noch nicht in datenbanken drin um sowas zu kennen und das mit der query hab ich überlesen

W
103 Beiträge seit 2007
vor 15 Jahren

delete from Tabelle where ID not in (select MAX(ID) from Tabelle group by Name)

so funzt das, wenn du zu jedem Datensatz eine eindeutige ID hast.

Gruß
wettmasta