Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Löschen doppelter Einträge mittels SQL-Befehl

Begonnen von FuzzyHair, April 16, 2017, 20:49:06

⏪ vorheriges - nächstes ⏩

FuzzyHair

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

Lachtaube

Vermutlich geht's so.DELETE FROM TABLENAME a
WHERE  id <
       ( SELECT Max( id )
         FROM   TABLENAME
         WHERE  col1name = a.col1name AND
                col2name = a.col2name );
Grüße von der (⌒▽⌒)

FuzzyHair