Duplikate bei besonderer MDB-Struktur löschen

Sixta Gohlke

Neuer Benutzer
Beiträge
1
Ich habe eine mdb-Datei mit der Struktur

Tabelle Main:

int recordID, int status, int placement, bool @private, string category, string note, string description, string dueDate, bool completed, int priority, byte[] blob, bool repeatOnCompleteDate, string completeDate, bool alarmSet, string alarmTime, int alarmAdvance, string repeatStartDate, string repeatInfo

Ich möchte doppelte Einträge löschen, bei denen description gleich ist, sodaß je nur noch ein Eintrag übrigbleibt. Vorzugsweise soll der Eintrag übrigbleiben, bei dem category nicht "0" ist.

Wie ist der MS-Access-SQL-Befehl?

Ein Vorschlag ist

delete from MyTable
where uniqueField not in
(select min(uniqueField) from MyTable T2
where T2.dupField=MyTable.dupField)

das scheint aber als

delete from Main where Category not in (select min(Category) from Main T2 where T2.Description=Main.Description)

nicht zu funktionieren
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.702
Das ist nicht ganz einfach. Wenn ich dich richtig verstehe kann Category auch in mehreren Fällen 0 sein.

Ich versuche mal einen Ansatz, der in MS SQL funktionieren könnte. In Access bin ich mir nicht sicher wegen TOP und DISTINCT. Wichtig ist, das die recordID eindeutig ist.
Code:
DELETE
FROM    Main
WHERE    recordID IN (    SELECT    recordID
                        FROM    (    SELECT    t1.[Description],
                                            ( SELECT TOP 1 recordID FROM Main t2 WHERE [Description] = t1.[Description] ORDER BY category DESC ) AS recordID
                                    FROM    ( SELECT DISTINCT [Description] FROM Main ) t1
                                ) t3
                    )

Bitte nur mit Testdaten ausführen.
 
Oben