Neuigkeiten:

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

Mobiles Hauptmenü

Text in Tabelle B auf Wörter, die in Tabelle A stehen, durchsuchen

Begonnen von Arphenion, November 24, 2014, 13:18:08

⏪ vorheriges - nächstes ⏩

Arphenion

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

DF6GL

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

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

Arphenion

#3
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