Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Ben.Wisch am Juli 12, 2011, 14:30:31

Titel: DELETE DISTINCTROW Probleme
Beitrag von: Ben.Wisch am Juli 12, 2011, 14:30:31
Hallo da draussen an den Bildschirmen.

Ich habe mal wieder ein Problem, dieses mal mit dem Löschen doppelter Datensätze. Ich habe mir da ein SQL Statement zusammengebastelt und dachte es könnte klappen. Tut es aber nicht.
Wo habe ich mal wieder den Fehler versteckt und könnte mir jemand von euch Profis helfen.

danke schon mal im voraus. Ach ja hier noch das Coding :

     strSQL2 = "DELETE DISTINCTROW A1.* " & _
               "FROM Tabelle1 AS A 1" & _
               "INNER JOIN Tabelle2 AS A2 " & _
               "ON A1.Name = A2.Name " & _
               "WHERE A1.Name = A2.Name;"
     Debug.Print strSQL2
     DoCmd.RunSQL strSQL2


Tabelle 1 ist eine "normale" Tabelle und
Tabelle 2 ist eine Abfrage.


D A N K E

Ben.Wisch
Titel: Re: DELETE DISTINCTROW Probleme
Beitrag von: DF6GL am Juli 12, 2011, 14:40:57
Hallo,

hier ist zunächst ein Leerzeichen zuviel:

AS A 1


"zunächst" soll heißen, dass der SQl-String vermutlich nicht das leistet, was er soll.   z. B. ist die Where-Condition falsch/überflüssig, weil eh schon damit verjoint wurde.

Desweiteren MUSS  "Name" in Eckklammern gesetzt werden, da dies ein reserviertes Wort ist.
Titel: Re: DELETE DISTINCTROW Probleme
Beitrag von: database am Juli 12, 2011, 20:48:58
Hallo,


DELETE Tabelle.*
FROM Tabelle
WHERE EXISTS (SELECT * FROM Abfrage WHERE Abfrage.T2Name = Tabelle.T1Name)


sollte alle Duplikate in den angegebenen Tabelle/Abfrage finden und löschen

Teste mal mit SELECT statt DELETE um die Datensätze zu sehen, die gelöscht werden

HTH
Titel: Re: DELETE DISTINCTROW Probleme
Beitrag von: ebs17 am Juli 13, 2011, 00:27:32
Beim Löschen von Duplikaten soll üblicherweise jeweils ein Datensatz stehen bleiben. Ist das hier auch so? Bei Unkenntnis des Inhalts der Abfrage und in Ermangelung eines eindeutigen Schlüssels zur Unterscheidung von verbleibenden und zu löschenden Datensätzen wird das mit den gegebenen Informationen nicht beantwortbar sein. Ein Feld "Name" dürfte mit hoher Wahrscheinlichkeit nicht für Eindeutigkeit stehen.

Ein wichtigen Hinweis sollte man nicht vergessen: Es ist wie im wahren Leben - Müllvermeidung ist besser als Müllbeseitigung. Statt irgendwie alles in die DB zu ziehen und dann aufräumen zu müssen, ist es effektiver, ungewünschte Duplikate gar nicht erst zuzulassen.
Das erreicht man durch einen eindeutigen Index auf Feld/Feldkombination, die Duplikate kenntlich machen. Zusätzlich würde man beim Einfügen von neuen Datensätzen in Stammdatentabellen eine Inkonsistenzprüfung verwenden, um nur neue Datensätze einzufügen und somit Schlüsselverletzungen zu vermeiden. Schlüsselverletzungen bezeichne ich auch als Fehler.

MfGA
ebs