Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Ähnliche Datensätze löschen

Begonnen von Sartorius, April 27, 2016, 12:12:17

⏪ vorheriges - nächstes ⏩

Sartorius

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  ;)

DF6GL

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
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Sartorius

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.

DF6GL

Hallo,

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


Bei Namen mit mehreren  Wörtern die inneren Worte ausschneiden und dann vergleichen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MaggieMay

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.
Freundliche Grüße
MaggieMay