Mit SQL nach "enthaltenen Woertern" in einem String suchen
-
Hallo,
Folgendes Problem interessiert mich schon seit einigen Tagen: ich denke fast jeder kennt zB www.leo.org, dort gibt es ja diese Woerterbuchgeschichten, zB Deutsch-Franzoesisch / Franzoesisch-Deutsch. Gebe ich einen Suchbegriff auf deutsch ein, bekomme ich ein entsprechendes Wort auf Franzoesisch zurueck, bzw andersrum. Nun gibt es aber im franzoesischen speziell sehr viele zusammengesetzten Strukturen, bspw. mit "de". Dh. ich suche nach "de" und bekomme u.a. zB folgende Treffer:
"de" = "von"
"de fait" = "de facto"
"afin de" = "um ... zu"
"À partir de quand?" = "Ab wann?"Wie laeuft so ein Problem SQL-maessig ab? Wenn ich mir ueberlege, ich habe zu obigem Beispiel, also folgende Eintraege gemacht:
INSERT INTO Vokabeln (Deutsch, Franzoesisch) VALUES ('von', 'de'); INSERT INTO Vokabeln (Deutsch, Franzoesisch) VALUES ('de facto', 'de fait'); INSERT INTO Vokabeln (Deutsch, Franzoesisch) VALUES ('um ... zu', 'afin de'); INSERT INTO Vokabeln (Deutsch, Franzoesisch) VALUES ('Ab wann?', 'À partir de quand?');
Dann enthalten diese zwar alle irgendwo "de", aber mit welchem Befehl kann man denn effektiv nach so einer Subsequenz suchen, die ein eigenstaendiges Word (Am Anfang, Ende oder in der Mitte) in einem Eintrag, sein soll?
Ein einfaches..
SELECT Deutsch, Franzoesisch FROM Vokabeln HAVING 'de';
braechte mir ja wahrscheinlich nur "absolute" Treffer. Ich habe nur noch dumpf HAVING in Erinnerung, aber ich weiss nicht ob etwa obige Strategie die Eintraege anzulegen um diese Art der Suche zu erlauben ueberhaupt sinnvoll ist?!Also meine konkreten Fragen:
Wie legt man Werte in einer Datenbank so an, um effektiv per SQL eine Suche der obigen Form durchfuehren zu koennen?
Wie sucht man effektiv nach einzelnen Woertern die in einem Eintrag vorne, mittig oder hinten stehen koennen?PS:
Ich bin blutigster SQL Anfaenger, also bitte nicht schlagen, wenn die Frage sehr dumm ist, ich lese mich auch gerade etwas ein.
-
Fabeltier schrieb:
Wie sucht man effektiv nach einzelnen Woertern die in einem Eintrag vorne, mittig oder hinten stehen koennen?
je nach Datenbank gibt es unterschiedliche Wildcards
bei MSSQL/MSDE geht z.B. folgendes- Text muss am Anfang stehen: select * from tabelle where wert like 'de%'
- Text muss am Ende stehen: select * from tabelle where wert like '%de'
- Text steht irgendwo: select * from tabelle where wert like '%de%'hier ist % die Wildcard und steht für 0 bis beliebige Anzahl von Zeichen
bei Interbase (und wahrscheinlich auch Firebird) ist % die Wildcard für mehrere Zeichen und _ für nur ein Zeichen, ausserdem gibt es spezielle Befehle wie z.B. "Starting with"
also einfach mal in die Dokumentation zur Datenbank schaun
-
Danke schon mal, aber ich muss doch noch mal nachfragen:
Gut, aber Woerter mit de werden ja zB nicht gebracht (bspw. "désactiver") - oder heisst das nur, dass zusaetzlich zu den Wildcards noch ein empty space angehaengt wird? bspw "de %", "% de %", "% de"?
Ist so eine Suche denn eigentlich effektiv. So etwas aehnliches hatte ich mir auch schon ueberlegt, aber da werden doch saemtliche DB-Eintraege durchgegangen ob sie entsprechendes enthalten. Ist es nicht schneller, gleich die Eintraege entsprechend (geht das ueberhaupt?) anzulegen, um dann eine effektivere/schnellere Suche zu ermoeglichen? Welche Moeglichkeit gaebe es dann?