Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: FuzzyHair am April 16, 2017, 20:49:06

Titel: Löschen doppelter Einträge mittels SQL-Befehl
Beitrag von: FuzzyHair am April 16, 2017, 20:49:06
Hallo Acces-o-Mania!
Ich habe nochmals ein SQL Problem: Es sollen alle doppelten Datensätze aus der Datenbank gelöscht werden, bis nur noch ein Eintrag übrig bleibt.

Meine Datenbank enthält eine große Anzahl an Einträgen. Im Folgenden ein paar Beispiele:






IDCol1Name [Varchar(255)]Col2Name [Varchar(255)]Col3Name [Bit]Col4Name [Bit]Col5Name [Longtext]
1A1B1FalseFalseText...
2A1B2FalseFalseText...
3A2B1FalseFalseText...
4A2B1TrueFalseText...

Zitat
Anmerkung:
Col1Name und Col2Name sind beide als NOT NULL gesetzt, enthalten also zwangsläufig eine Zeichenfolge.

Gelöscht werden soll, wo Col1Name und Col2Name gleich sind. Die Bits und der LongText können auch verschieden sein. Hier im Beispiel sollte also einer der beiden Einträge mit Col1Name=A2 und Col2Name=B1 gelöscht werden. Wenn ich mir aussuchen kann, welcher übrig bleiben soll, dann am besten der neuste (höchste ID).

Mein aktuellers SQL Statement sieht wie folgt aus:

DELETE FROM TableName AS A
WHERE A.ID IN (
     SELECT B.ID FROM TableName AS B
     WHERE (
          NOT B.ID=A.ID
          AND B.Col1Name=A.Col1Name
          AND B.Col2Name=A.Col2Name
     )
);

Beim Ausführen wird aber überhaupt kein Eintrag gelöscht. Wisst Ihr wo hier der Fehler liegt?

Vielen Dank für Eure Hilfe!  :)

FuzzyHair
Titel: Re: Löschen doppelter Einträge mittels SQL-Befehl
Beitrag von: Lachtaube am April 16, 2017, 22:55:22
Vermutlich geht's so.DELETE FROM TABLENAME a
WHERE  id <
       ( SELECT Max( id )
         FROM   TABLENAME
         WHERE  col1name = a.col1name AND
                col2name = a.col2name );
Titel: Re: Löschen doppelter Einträge mittels SQL-Befehl
Beitrag von: FuzzyHair am April 17, 2017, 10:05:24
Jep, so funktioniert es! Danke Dir!  :D