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 ;)
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
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.
Hallo,
ok, dann ist mein Vorschlag anwendbar, vielleicht noch so angepasst:
Bei Namen mit mehreren Wörtern die inneren Worte ausschneiden und dann vergleichen.
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.