Obtenez précédente et la ligne suivante de lignes sélectionnées (OÙ) les conditions
Par exemple, j'ai cette déclaration:
my name is Joseph and my father's name is Brian
Cette déclaration est coupée en deux par la parole, à l'instar de ce tableau:
------------------------------
| ID | word |
------------------------------
| 1 | my |
| 2 | name |
| 3 | is |
| 4 | Joseph |
| 5 | and |
| 6 | my |
| 7 | father's |
| 8 | name |
| 9 | is |
| 10 | Brian |
------------------------------
Je veux obtenir précédent et suivant parole de chaque mot
Par exemple je veux obtenir précédent et suivant le mot de "nom":
--------------------------
| my | name | is |
--------------------------
| father's | name | is |
--------------------------
Comment pourrais-je obtenir ce résultat?
Est-il des lacunes dans vos identifiants?
La base de données que vous utilisez? Quelle est la version de la base de données utilisez-vous? SQL est un langage, mais presque chaque base de données est un peu différent en dialecte SQL qu'il prend en charge. Ce genre de chose est beaucoup plus facile lorsque vous utilisez une base de données qui prend en charge des fonctions analytiques comme
j'utilise SQL 2012, le soutien du GAL et le PLOMB, mais je veux prendre le résultat pour les 5 millions de word rapidement, il est important de prendre des résultat très rapide dans mon programme
La base de données que vous utilisez? Quelle est la version de la base de données utilisez-vous? SQL est un langage, mais presque chaque base de données est un peu différent en dialecte SQL qu'il prend en charge. Ce genre de chose est beaucoup plus facile lorsque vous utilisez une base de données qui prend en charge des fonctions analytiques comme
lead
et lag
.j'utilise SQL 2012, le soutien du GAL et le PLOMB, mais je veux prendre le résultat pour les 5 millions de word rapidement, il est important de prendre des résultat très rapide dans mon programme
OriginalL'auteur mahdi yousefi | 2014-11-23
Vous devez vous connecter pour publier un commentaire.
vous n'avez pas de spécifier votre SGBD, donc la suite est la norme ANSI SQL:
SQLFiddle: http://sqlfiddle.com/#!12/7639e/1
son ok, mais j'ai plus de 100 millions d'enregistrements, et le temps de prendre résultat est très important, puis-je améliorer les performances de ce code
Je veux obtenir rapidement au résultat, pouvez-vous m'aider?
veuillez créer une nouvelle question.
stackoverflow.com/questions/27102180/...
OriginalL'auteur a_horse_with_no_name
Sans les sous-requêtes:
op dit que le tableau a été créé à partir de fractionnement d'une phrase, donc il y shoudn pas être tout écart
OriginalL'auteur Will
Pourquoi personne n'a-corps donner la réponse la plus simple?
WHERE
clause.OriginalL'auteur Nick P
Utilisation
Join
pour obtenir le résultat attendu pourSQL Server 2005
plus.Résultat:
Fiddler Démo
OriginalL'auteur Saravana Kumar
Essayer cette
OriginalL'auteur Pரதீப்
Voici une approche différente, si vous voulez le choisit pour être le plus rapide. Il faut un peu de travail de préparation.
Créer une nouvelle colonne (par exemple, "phrase") dans la base de données qui contiendra les mots
vous voulez. (c'est à dire la précédente, l'actuelle et la prochaine).
Écrire un trigger sur insert ajoute le nouveau mot à la précédente
ligne de la phrase et ajoute la ligne précédente du mot à la nouvelle ligne de mot et remplit
phrase.
Si les mots peuvent changer, vous aurez besoin d'un déclencheur sur mettre à jour pour garder la phrase dans la synchro.
Puis il suffit de sélectionner la phrase. Vous obtenez beaucoup mieux de vitesse, mais le coût de stockage supplémentaire et plus lent insérer et plus difficile à entretenir. Évidemment, vous devez mettre à jour la phrase de la colonne pour les enregistrements existants, mais vous avez le SQL à faire dans les autres réponses.
OriginalL'auteur mlinth
J'ai créer un index sur mon mots de la colonne et de mettre ce code pour arriver rapidement au résultat:
OriginalL'auteur mahdi yousefi