Ich habe einen Tisch wie diesen
Zum Beispiel habe ich diese Aussage:
%Vor%Diese Anweisung wird wie diese Tabelle nach Wörtern aufgeteilt
%Vor%Ich möchte den vorherigen und nächsten Wert desselben Wortes erhalten
Zum Beispiel möchte ich das vorherige und nächste Wort von "name" erhalten:
%Vor%Wie kann ich das tun?
Sie haben Ihr DBMS nicht angegeben, daher ist ANSI SQL:
%Vor%SQLFiddle: Ссылка
Hier ist ein anderer Ansatz, wenn Sie möchten, dass die Auswahl schnell ist. Es braucht ein bisschen Vorbereitung.
Erstellen Sie eine neue Spalte (z. B. "Phrase") in der Datenbank, die die Wörter enthält Sie wollen. (d. h. das vorherige, das aktuelle und das nächste).
Schreiben Sie einen Trigger, der beim Einfügen das neue Wort an das vorherige anfügt Zeile und fügt das Wort der vorherigen Zeile dem Wort und der Füllung der neuen Zeile hinzu Phrase.
Wenn sich die einzelnen Wörter ändern können, benötigen Sie einen Auslöser für die Aktualisierung, um die Phrase synchron zu halten.
Wählen Sie dann die Phrase aus. Sie erhalten viel bessere Geschwindigkeit, aber auf Kosten von zusätzlichem Speicher und langsamer Einfügung und härterer Wartbarkeit. Offensichtlich müssen Sie die Phrasespalte für die vorhandenen Datensätze aktualisieren, aber Sie haben die SQL, um das in den anderen Antworten zu tun.
Verwenden Sie Join
, um das erwartete Ergebnis für SQL Server 2005
plus zu erhalten.
Ergebnis:
Ich erstelle einen Index für meine Wortspalte und setze diesen Code, um das Ergebnis schnell zu erhalten:
%Vor%Tags und Links sql sql-server sql-server-2012 rows