Anmelden

View Full Version : doppelte Sätze löschen mit SQL



hs
18-11-04, 15:12
Hatte gehofft, dass deises Thema hier schon oft behandelt worden ist, habe aber nichts gefunden:

Kann man mit SQL doppelte Sätze aus einer datei löschen?

Die Entscheidung, ob der Satz doppelt vorhanden ist, soll dabei anhand eines bestimmten Feldes getroffen werden, nicht anhand des kompletten Satzinhaltes.

Mit Select sieht das so aus:

SELECT feldname, count(*) FROM datei GROUP BY feldname HAVING count(*) = 2

-> als Ergebnis bekomme ich jetzt alle doppelten Sätze (Feldinhalt von feldname ist gleich).

Ich möchte jetzt, dass bei diesen jeweils einer gelöscht wird.

Geht das mit SQL?

Danke
HS

malzusrex
18-11-04, 15:39
gab des doch schon mal hier
drück mich (http://www.rlpforen.de/showthread.php?t=1511&highlight=doppelt+s%E4tze+l%F6schen)

Habe ich aber nur über GOOGLE gefunden. über die suche hier, hat er es mir auch nicht ausgespuckt

tschau ronald

hs
18-11-04, 16:44
Hallo ronald,

komische Suchfunkton. Im Beitrag stand eindeutig "doppelt" !

Habs mal durchgelesen, der löst mein Problem aber nur zum Teil:

Ich kann mir damit zwar die doppelten Sätze anzeigen lassen, jedoch suchte ich ja nach einer Möglichkeit, doppelte zu löschen!

Jemand eine Idee?

Danke
HS

malzusrex
18-11-04, 19:35
dann versuche es mal hier mit


delete from malz/artprgr a
where 1 <
(select count(*)
from malz/artprgr b
where a.netto = b.netto
and a.brutto = b.brutto
and a.mwst = b.mwst )
and rrn(a) >
(select min(rrn(a))
from malz/artprgr b
where a.netto = b.netto
and a.brutto = b.brutto
and a.mwst = b.mwst )


Im SQL bleibt der Satz mit der kleinsten Relativen Satznummer übrig.

tschau ronald

ps: ist ein sql was ich schon eingesetzt habe.

sirdidi
19-11-04, 08:23
Hallo,

Antwort: Unter der Voraussetzung, dass die „doppelten„ Datensätze völlig identische Informationen enthalten, also nicht nur die Schlüsselfelder identisch sind, läßt sich die Aufgabe mit SQL schnell lösen. Angenommen, die zu bearbeitende Datei heißt DOPPELDAT. Dann erledigen ganze vier SQL-Anweisungen die Arbeit. Als Erstes erstellen Sie ein Dateiduplikat ohne Datensätze

Create Table DATDUP Like DOPPELDAT

Dann füllen Sie die Duplikatdatei mit den Datensätzen, wobei das SQL-Schlüsselwort DISTINCT doppelte Sätze ausläßt:

Insert Into DATDUP (Select Distinct * From DOPPELDAT)

Nun löschen Sie den Inhalt der Ursprungsdatei:

Delete From DOPPELDAT

und kopieren zu guter Letzt die Dateien der Arbeitsdatei zurück in die Originaldatei:

Insert Into DOPPELDAT (Select * From DATDUP)

Als letztes löschen Sie die Arbeitsdatei, falls Sie sie nicht mehr benötigen. Das können Sie dann per DLTF erledigen (sonst wären es ja 5 SQL-Anweisungen geworden ;-)

Auszug aus NewsWatch 04/2002...

Gruß Ralph

Fuerchau
19-11-04, 19:19
Das Problem hatten wir schon mal:
http://www.rlpforen.de/showthread.php?t=5984

Dort hats funktioniert !

hs
22-11-04, 07:28
Vielen Dank für die Tips.

Habe es mit dem SQL-Befehl von ronald hinbekommen.

Gruß
HS

malzusrex
22-11-04, 10:30
naja,
habe das SQL in ähnlicher form auch bloß hier im forum gefunden

gruß ronald