Get vorherigen und nächsten Reihe von Zeilen ausgewählt (WO) Bedingungen
Ich habe zum Beispiel diese Aussage:
my name is Joseph and my father's name is Brian
Diese Aussage ist aufgeteilt durch das Wort, das, wie in dieser Tabelle:
------------------------------
| ID | word |
------------------------------
| 1 | my |
| 2 | name |
| 3 | is |
| 4 | Joseph |
| 5 | and |
| 6 | my |
| 7 | father's |
| 8 | name |
| 9 | is |
| 10 | Brian |
------------------------------
Möchte ich, um die vorherigen und nächsten Wort jedes Wort
Zum Beispiel möchte ich, um die vorherigen und nächsten Wortes "name":
--------------------------
| my | name | is |
--------------------------
| father's | name | is |
--------------------------
Wie könnte ich dieses Ergebnis?
- Gibt es irgendwelche Lücken in Ihrem ids?
- Welche Datenbank verwenden Sie? Welche version der Datenbank verwenden Sie? SQL ist eine Sprache, aber fast jede Datenbank hat einen etwas anderen Dialekt von SQL, die es unterstützt. Diese Art der Sache viel einfacher, wenn Sie mit einer Datenbank, die unterstützt Analysefunktionen wie
lead
undlag
. - ich benutze SQL 2012 Unterstützung der LAG-und LEAD -, aber ich wollen, nehmen Sie das Ergebnis für die 5-Millionen-Wort "schnell" ist es wichtig, zu nehmen das Ergebnis sehr schnell in meinem Programm
Du musst angemeldet sein, um einen Kommentar abzugeben.
du nicht angeben, DBMS, so dass die folgenden ANSI SQL:
SQLFiddle: http://sqlfiddle.com/#!12/7639e/1
Warum keine Körper geben, die einfache Antwort?
WHERE
- Klausel.Ohne Unterabfragen:
Verwenden
Join
um das erwartete Ergebnis fürSQL Server 2005
plus.Ergebnis:
Fiddler Demo
Versuchen, diese
Hier ist ein anderer Ansatz, wenn Sie wollen, der wählt zu schnell sein. Es dauert ein bisschen Arbeit.
Erstellen Sie eine neue Spalte (z.B. "Satz") in die Datenbank, die die Wörter enthalten
Sie wollen. (d.h. die früheren, die aktuelle und die nächste).
Schreiben Sie einen trigger, der beim einfügen fügt das neue Wort zum vorhergehenden
Reihe, Satz und fügt der vorherigen Zeile das Wort in der neuen Zeile die Wort-und füllt
Satz.
Wenn die einzelnen Wörter ändern können, müssen Sie einen trigger on update, um zu halten die Formulierung in der sync.
Wählen Sie dann den Satz. Sie erhalten viel bessere Geschwindigkeit, aber auf Kosten zusätzlicher Speicher und langsamer einfügen und härter Wartbarkeit. Offensichtlich haben Sie zum aktualisieren der Satz Spalte für die vorhandenen Datensätze, aber Sie haben die SQL zu tun, dass in den anderen Antworten.
Ich create index auf meine Worte Spalte und setzen Sie diesen code ein, um das Ergebnis schnell: