Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: nurmikss am März 26, 2020, 17:57:54

Titel: Systematiken (mehrere in der gleichen Tabelle) abgleichen
Beitrag von: nurmikss am März 26, 2020, 17:57:54
Wir verwenden zur Gliederung unserer Sachen verschiedene Systematiken (so ähnlich wie Büchereisystematiken). Das Fachprogramm sieht dafür eine einzige Tabelle vor, in der (vereinfacht) jede Systematik eine ID bekommt (Spalte Sys_ID) und in einer weiteren Spalte (Syg-Name) die einzelnen Einträge stehen (hier ein Ausschnitt aus unserer großen, umfangreiche Haupt-Systematik die mit Großbuchstaben beginnt (die nenne ich mal ,,großer Plan", unten blau markiert):

Leider haben unsere Vorgänger sich nicht daran gehalten, sondern mehrere Systematiken unter einer Sys_ID eingespeichert, die sich nur durch die Syntax im Syg_name unterscheiden. So gibt es unter Sys_ID 14 den ,,großen Plan" s. oben) und zusätzlich (auch mit anderen Sys_ID) noch weitere Systematiken, die z.B. mit römischen oder arabischen Ziffern beginnen:
Mein Ziel ist, die Systematiken zu bereinigen und am Ende eine Tabelle zu haben, in der jede Systematik ihre eigene Sys_ID hat.
Außerdem möchte ich Systematiken, die Untermengen des ,,großen Plans" sind (oben grün markiert), entfernen. Zuvor muss ich prüfen, ob sie tatsächlich redundant sind, weil im Lauf der Zeit Inkonsistenzen entstanden sind (oben rot markiert). Das können Unterscheidungskürzel sein (,,05-"), Schreibfehler, unschädliche Synonyme oder aber relevante inhaltliche Unterschiede.
Meine Frage:
Wie kann ich den ,,großen Plan" und eine andere Systematik so darstellen, dass ich sehe, wo sie voneinander abweichen ?
Zum Beispiel: Vergleich
,,Großer Plan" (alle mit Sys_ID = 14 und Syg_Name beginnt mit Großbuchstaben (RegEx: "^[A-Z] "))
mit
Systematik Nr. 33 (alle mit Sys_ID = 16 und Syg_Name beginnt mit ,,33-"):
Die Auswertung sollte ergeben, dass
1.: der rechte Teil von ,,33-H 2.2.1 Binnenwartung" von ,,H 2.2.1 Binnenwanderung" abweicht und
2.: der Eintrag ,,33-H 2.2.2 irgendwasanderes" im ,,großen Plan" nicht vorkommt.
Lösungsansatz:
Ich stelle die Tabelle als Alias sich selbst gegenüber (Tabelle1 - Tabelle2),
begrenze die Auswahl aus Tabelle1 auf alles, was Sys_ID = 14 hat und  Syg_Name mit Großbuchstabe+LEER beginnt (die römische ,,I" kann vernachlässigt werden),
begrenze die Auswahl aus Tabelle2 auf alles, was Sys_ID = 16 hat und Syg_Name mit ,,33-" beginnt
und vergleiche Tabelle1.Syg_Name mit Right(Tabelle2.Syg_Name,Len(Tabelle2.Syg_Name)-3), also ohne die führende "33-".

Aber wie mache ich das praktisch ? Ich habe mich in JOINs verheddert. Kann mir jemand helfen ?
Titel: Re: Systematiken (mehrere in der gleichen Tabelle) abgleichen
Beitrag von: ebs17 am März 27, 2020, 09:20:20
Das ist deutlich anders und komplexer als typische Abfragelösungen. Mit einer "einfachen" Abfrage kommt man da nicht hin. Zudem dürfte eine solche Maßnahme einmalig sein, wenn auch gebündelt in einem VBA-Ablauf wiederholbar. Damit kann man von eigentlichen nötigen Techniken durchaus deutlich abweichen, ein Funktionieren an sich steht im Vordergrund.

Zuerst würde ich in den Tabellen zusätzliche Felder anlegen und dort atomare Informationen aus Syg-Name ablegen:
33-H 2.2.1 Binnenwartung

Über den Grünanteil kann man dann bspw. Datensätze aus Plan und Ist eindeutig gegenüberstellen und vergleichen, also ob es ein Pendant in der anderen Tabelle gibt oder nicht, ob zugehörige Datensatzinhalte identisch sind.

Bei voller Gleichheit würde ich dann solche Datensätze aus der vorhandenen Tabelle in eine strukturgleiche Tabelle verschieben, damit dann die Datenmenge der Ausgangstabellen für Folgevergleiche deutlich kleiner und übersichtlicher wird. Aus diesem "Rest" müsste man sich dann Folgevergleiche überlegen, die dann wohl immer individueller und spezifischer werden würden, bis sich die manuelle Überarbeitung eher lohnt. Für eine vorgesehene automatisierte Wiederholung sollte aber der manuelle Anteil gegen Null gehen.

Ob man dann später die Einzelinhalte in einem Tabellenfeld wieder gebrauchserschwerend zusammensetzt oder diese Zusammensetzung einer Abfrage überlässt, wäre dann eine Folgeüberlegung.

Soweit meine Überlegungen dazu.
Titel: Re: Systematiken (mehrere in der gleichen Tabelle) abgleichen
Beitrag von: nurmikss am März 27, 2020, 16:30:58
Danke, das hat weitergeholfen.

Statt mit einer Aliasdatei zu arbeiten, habe ich die für die Auswertung relevanten Felder in eine neue Tabelle ,,tbl_Systematik2_Arbeit" kopiert (dadurch wird der zuvor berechnete Ausdruck zu einem Textfeld S2_SYG_Name_rechts und wird in der "ON"-Klausel akzeptiert).

Eine darauf aufbauende Abfrage mit inner Join mit der neuen Tabelle, zeigt alle übereinstimmenden Datensätze,
begrenzt auf den ,,großen Plan" (Einträge fangen mit Großbuchstabe an)
und die zu prüfende Spezialsystematik (hier die, deren Einträge mit ,,33 " beginnen).
Die oben genannten Inkonsistenzen (Schreibfehler, Einträge, die nur ein einer der beiden Systematiken vorkommen) werden aber durch diese Abfrage noch nicht dargestellt.

Wie kann ich diese Abfrage noch erweitern, dass auch die übrigen Einträge der zu prüfenden Systematik angezeigt werden, die keine (exakte) Entsprechung in ,,großen Plan" haben, also z.B.:

Titel: Re: Systematiken (mehrere in der gleichen Tabelle) abgleichen
Beitrag von: ebs17 am März 28, 2020, 08:51:33
Zitatkeine (exakte) Entsprechung
Da kommt das Thema Ähnlichkeit ins Spiel. Umsetzung z.B. über
- LIKE Muster (in einfachen Fällen)
- RegEx. Die Pattern sind aber extrem stark selektierend und müssten sehr präzise formuliert sein. Ein Muster "über alles" bei "Kreativ"-Eingaben von Usern halte ich für unmöglich, mindestens aber für extremst aufwändig. Bei einem händischen Vergleich hätte man da wenigstens einen laufenden Fortschritt.
- Kölner Phonetik (https://www.vbarchiv.net/tipps/details.php?id=1754) und ähnliche Methoden.

Wie oben schon mal gesagt würde ich aber die "Guten" in eine Fertig-Tabelle verschieben, um solche spezielleren und aufwändigeren Methoden nur auf die Restmenge anwenden zu müssen. Dies deshalb, weil ich grundsätzlich größere Datenmengen unterstelle und ein Laufzeitproblem vermeiden möchte, zum anderen hat man bei einem Rest eher eine Übersicht, um sich über zusätzliche Muster und Tests klar werden zu können.

Ich würde schon nicht versuchen, Deine gezeigten acht Zeilen in eine Regel pressen zu wollen. Vermutlich sind es ein paar mehr ...