Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Sartorius am April 27, 2016, 12:12:17

Titel: Ähnliche Datensätze löschen
Beitrag von: Sartorius am April 27, 2016, 12:12:17
Hallo zusammen,

folgende Frage von mir: ich habe eine Tabelle mit Datenschrott bekommen, die ich auf folgende Struktur gebracht habe

MNAME (Text), DATUM (Datum), FNAME (Text)

In dieser Hochzeitstabelle gibt es jeden Datensatz doppelt, aber nicht identisch:

Johann Heinrich Meier 01.01.1700 Anna Müller
Anna Catharina Müller 01.01.1700 Johann Meier

Diese beiden Zeilen behandeln ein und dieselbe Trauung.

Wie lösche ich diese Doubletten?

Mit

DELETE DISTINCTROW T1.*, T1.ID
FROM   DeineTabelle AS T1
       INNER JOIN DeineTabelle AS T2
       ON  T1.Nummer  = T2.Nummer
WHERE  T1.ID>T2.ID

lösche ich ja nur genau identische DS....

Besten Dank schonmal  ;)
Titel: Re: Ähnliche Datensätze löschen
Beitrag von: DF6GL am April 27, 2016, 15:31:39
Hallo,

da gibt es keinen Automatismus....   Zudem: ist Meier/Müller authentisch oder ein Tippfehler?

Allenfalls ist der Einsatz von Regular Expressions denkbar.


oder genau (!) anhand der Beispieldaten (und wenn Meier/Müller ein Tippfehler ist):

Bei Namen mit 3 Wörtern das mittlere Wort ausschneiden und dann vergleichen
Titel: Re: Ähnliche Datensätze löschen
Beitrag von: Sartorius am April 27, 2016, 17:48:34
In meinem Beispiel war ein Fehler, sorry dafür, hab's korrigiert.

Ich hoffe, es ist jetzt verständlicher: in der linken Spalte steht die Person mit mehreren Vornamenund dem Nachnamen, in der rechten immer nur ein Vorname und Nachname; beide Einträge behandeln aber die selbe Trauung.
Titel: Re: Ähnliche Datensätze löschen
Beitrag von: DF6GL am April 27, 2016, 18:58:34
Hallo,

ok, dann ist mein Vorschlag anwendbar, vielleicht noch so angepasst:


Bei Namen mit mehreren  Wörtern die inneren Worte ausschneiden und dann vergleichen.
Titel: Re: Ähnliche Datensätze löschen
Beitrag von: MaggieMay am April 27, 2016, 20:04:15
Hallo,

ich würde nicht einen der Datensätze löschen, denn dabei verlierst du ja die vollständigen Vornamen eines Partners.
Statt dessen kannst du die paarigen Datensätze zusammenführen, bspw. mit folgender Abfrage:
SELECT t_Paare.p1, t_Paare_1.p1, t_Paare.hdat
FROM t_Paare, t_Paare AS t_Paare_1
WHERE fget_shortName(t_Paare.p1) = t_Paare_1.p2
And t_paare.ID > t_Paare_1.id;


Die Funktion dazu sieht folgendermaßen aus:
Public Function fget_ShortName(pName As String)
    Dim vArr
    vArr = Split(pName, " ")
    fget_ShortName = vArr(LBound(vArr)) & " " & vArr(UBound(vArr))
End Function


Bei Duplikaten unter den Namen musst du das Hochzeitsdatum noch als weiteres Kriterium hinzunehmen.