Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Arphenion am November 24, 2014, 13:18:08

Titel: Text in Tabelle B auf Wörter, die in Tabelle A stehen, durchsuchen
Beitrag von: Arphenion am November 24, 2014, 13:18:08
Hallo Zusammen,

ich habe vor kurzem die Aufgabe bekommen eine Lösung zu entwickeln, die die Anzahl von bestimmten Schlüsselwörtern in einer Menge von Datensätzen errechnet. Im Klartext heißt das:

Ich habe eine DB mit zwei Tabellen. Eine Tabelle A mit Einträgen in einer Spalte wie z.B. T_007 und eine Tabelle B mit Einträgen in einer Spalte wie z.B. C:\\T_007\<dateiname>.<dateiendung> (also einfach eine Pfadangabe, wo eine Datei liegt). Ich möchte jetzt auf sämtliche Einträge in Tabelle B prüfen (also den gesamten Pfad-String durchsuchen), ob irgendein Eintrag der Tabelle A (hier also T_007) dort enthalten ist - die Anzahl der gefundenen Einträge pro Suchwort soll daraufhin ermittelt werden.
Teilweise existieren in Tabelle B (also der zu durchsuchenden Tabelle) 1,2Mio Datensätze. In Tabelle A (also die Kriterien-Tabelle) sind es etwa 200.
Via SQL sehe ich keine adequate Lösungsmöglichkeit - jedenfalls macht es für mich keinen Sinn eine WHERE-Condition zu basteln, die 200 Einträge mit OR verknüpft. Das wäre für mich zu statisch.

Es wäre super, wenn ihr mir helfen könntest einen Lösungsansatz zu finden. Vielen Dank schon einmal für eure Gedanken!

Viele Grüße,
Arphenion
Titel: Re: Text in Tabelle B auf Wörter, die in Tabelle A stehen, durchsuchen
Beitrag von: DF6GL am November 24, 2014, 16:24:16
Hallo,

versuch mal:

Select B.Stichwort, Count(*) AS AnzahlStichwort
From  Tabelle1 as A Inner Join Tabelle2 as B on Instr(A.Text1,B.Stichwort)
Group by B.Stichwort
Titel: Re: Text in Tabelle B auf Wörter, die in Tabelle A stehen, durchsuchen
Beitrag von: ebs17 am November 24, 2014, 20:53:40
ZitatVia SQL sehe ich keine adequate Lösungsmöglichkeit

Der LIKE-Operator ist eigentlich recht üblich:
SELECT
    A.Stichwort,
    COUNT(*) AS AnzahlStichwort
FROM
    Tabelle1 AS A,
    Tabelle2 AS B
WHERE
    B.Text1 LIKE '*' & A.Stichwort & '*'
GROUP BY
    A.Stichwort


Wenn Du noch auf die erste Wildcard (Sternchen) verzichten könntest, weil Du ein vollständiges Verzeichnis verwenden könntest, wäre bei der Filterung sogar eine teilweise Indexnutzung möglich, bei 1,2 Mio Datensätzen nicht ganz uninteressant.
Titel: Re: Text in Tabelle B auf Wörter, die in Tabelle A stehen, durchsuchen
Beitrag von: Arphenion am Dezember 05, 2014, 09:01:15
Hallo Zusammen,

vielen Dank erstmal! :)

Aktuell sieht es so aus, dass ich es folgend mache:

SELECT A.criteria, COUNT(*) AS AnzahlKriterim
FROM tblCriteria AS A, tblImport AS B
WHERE B.path LIKE A.criteria & '*'
GROUP BY A.criteria


Ich konnte das erste '*' eliminieren, weil ich über...

UPDATE tblmport SET path = Mid(path,4,20)

...die ersten Stellen, die immer gleich sind, eliminieren konnte. Ich überlege jetzt nur noch, ob ich wirklich die obige SELECT zum Zählen nutze oder den String weiter zurechtschneide und danach zähle. Wenn ich weiterschneide, könnte ich wahrscheinlich zu dem Punkt kommen, dass ich die tblCriteria überhaupt nicht mehr brauche, da die Kriterien dann eh schon in der richtigen Form dort stehen.

Vielen Dank jedenfalls schon mal!

Viele Grüße,
Arphenion