zwei mysql tabellen mit string werten vergleichen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
jimmyjam
User
Beiträge: 4
Registriert: Montag 29. Oktober 2012, 15:24

Hallo, ich möchte eine tabelle auf eine andere abbilden wobei ich da einen string vergleich machen muss. in der ersten tabelle sind ca 1000 datensätze mit strings und in der anderen ca 40000. jetzt möchte ich herausfinden welche daten aus der 2 tabelle auf die daten der ersten tabelle passen. alle umlaute werden vor der verarbeitung vereinheitlicht und alle klammern,bindestriche usw durch blanks ersetzt, da ich vorhatte die strings in tokens zu zerlegen und einfach mitzuzählen welcher string am besten auf den anderen passt. das liefert mir aber auch teilweise falsche ergebnisse :(
kleines beispiel: string aus tab1: "born am darss" entspricht momentan dem string aus tab2: "born auf dem darss", damit bin ich auch zufrieden. andereseits bekomm ich auch folgendes als ergebnis strin aus tab1:"dortmund scharnhorst" enstpricht string aus tab2: "scharnhorst kreis celle" was nicht stimmt, da das verschiedene orte sind.

hoffe mal ihr versteht was mein problem ist ^^
mfg jimmy
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@jimmyjam: Allein aus Manipulationen von Zeichenfolgen kann man nicht ableiten, wie die Welt empirisch beschaffen ist, also zB. ob Dortmund == Celle oder nicht. Du müsstest schon in irgendeiner Ortsnamen-Datenbank nachsehen, um herauszufinden, welche Namen zusammengehören. Aber selbst dann wirst du keine eindeutige Antwort bekommen. Beispiel: Allein in Bayern gibt es 32 mal den Ortsnamen "Bergham", darunter mehrere in Oberbayern, und eines heißt sogar "Bergham in Oberbayern" (im Gegensatz zu den anderen oberbayrischen Berghams, die offensichtlich zugleich in Oberbayern und nicht in Oberbayern liegen).
In specifications, Murphy's Law supersedes Ohm's.
jimmyjam
User
Beiträge: 4
Registriert: Montag 29. Oktober 2012, 15:24

in den meisten fällen steht auch der genaue ortsname dabei. bei meinen tabellen handelt es sich nämlich um 2 verschiedene orts-datenbanken mir geht es jetzt darum herauszufinden welche sicher aufeinanderpassen. es mir schon klar dass ich dadurch nich alle matchings herausbekomm.
BlackJack

@jimmyjam: Das geht nicht. Selbst Gleichheit bei der Zeichenkette garantiert nicht, dass es sich auch um den selben Ort handelt. Siehe pillmuncher's Beispiel mit Bergham.
jimmyjam
User
Beiträge: 4
Registriert: Montag 29. Oktober 2012, 15:24

gäbe es denn irgendeine möglichkeit so etwas zu realisieren? mir würde spontan ein gps koordinaten vergleich oder plz vergleich einfallen wenn man diese daten zu den orten gespeichert hätte. bin auch für weitere vorschläge offen, wie man einen ort eindeutig identifizieren könnte.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

jimmyjam hat geschrieben:gäbe es denn irgendeine möglichkeit so etwas zu realisieren? mir würde spontan ein gps koordinaten vergleich oder plz vergleich einfallen wenn man diese daten zu den orten gespeichert hätte. bin auch für weitere vorschläge offen, wie man einen ort eindeutig identifizieren könnte.
"identifizieren" ist das Zauberwort. Logisch betrachtet bilden Orte und Ortsnamen eine Paar-Relation (Ort, Ortsname). Ist die Relation eindeutig, sodass jeder Ort nur einen Namen hat, dann bildet sie eine Funktion f: Ort --> Ortsname. Diese ist injektiv, wg. der Eindeutigkeit und weil ein Name nur dann ein Ortsname ist, wenn ein Ort ihn hat. Was du aber brauchst, ist eine Zuordnung in der anderen Richtung, also eine surjektive Funktion g: T --> Ort, für irgendeine geeignete Menge T. GPS-Koordinaten oder Postleitzahlen würden wohl als T in Frage kommen. Das kann aber nur funktionieren, wenn diese Information in beiden Tabellen enthalten ist. Dann stellt sich allerdings die Frage, wozu man sich noch mit Ortsnamen herumschlagen soll? Statt dessen kann man einfach über die GPS-Koordinaten/PLZs joinen und den kanonischen Ortsnamen aus der ersten Tabelle verwenden. Ggf. muss man die join-Kriterien etwas lockern und nicht über identische Werte, sondern über Bereiche joinen, derart, dass die GPS-Koordiante/PLZ aus der zweiten Tabelle "nah genug" bei der aus der ersten Tabelle ist, um ein eindeutiges Ergebnis zu liefern.

Und selbst, wenn dir das alles nur hilft, um 95% der Daten zuzuordnen, dann wären das bei 40000 Datensätzen nur noch 2000 Datensätze, die man von Hand überprüfen müsste, eine Arbeit die ein motivierter Paraktikant in ein paar Tagen erledigen kann :wink:
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Je nachdem was mit den Daten gemacht werden soll, gebe ich zu bedenken: Es gibt Großstädte, die mehrere PLZ haben, ebenso gibt es auf dem Land mehrere Orte die eine identische PLZ haben.
jimmyjam
User
Beiträge: 4
Registriert: Montag 29. Oktober 2012, 15:24

ok danke für die antworten. dann werd ich mal etwas herumprobieren gehen. :)
Antworten