Comment ignorer que les n premières lignes dans la requête sql
Je veux incendie d'une Requête "SELECT * FROM TABLE
", mais de sélectionner uniquement à partir de la ligne N+1
. Aucune idée sur comment faire?
Qui sgbdr êtes-vous à l'aide de f.e. oracle, mysql ou sql-server)?
Qui sgbd? "OFFSET n" est la norme ANSI SQL, mais de nombreux sgbd produits de le faire par leurs propres moyens, par exemple. LIMITE, HAUT...
Aussi, si vous souhaitez trouver de lignes dans une ligne donnée-numéro de série, vous pouvez utiliser des fonctions comme
De vérifier la fonction ROW_NUMBER ().
(a) Dans les Bases de données Relationnelles (ie. ceux qui se conforment au Modèle Relationnel), les lignes sont pas ordonné, toute commande qui peut être requise déclaré explicitement par le code appelant via
Qui sgbd? "OFFSET n" est la norme ANSI SQL, mais de nombreux sgbd produits de le faire par leurs propres moyens, par exemple. LIMITE, HAUT...
Aussi, si vous souhaitez trouver de lignes dans une ligne donnée-numéro de série, vous pouvez utiliser des fonctions comme
ROW_NUMBER
. Mais cela dépend vraiment de votre sgbd.De vérifier la fonction ROW_NUMBER ().
(a) Dans les Bases de données Relationnelles (ie. ceux qui se conforment au Modèle Relationnel), les lignes sont pas ordonné, toute commande qui peut être requise déclaré explicitement par le code appelant via
ORDER BY …
(b) Nous n'avons pas les numéros de ligne ou ROW_NUMBER(),
qui est en fait un ID de l'Enregistrement. Ce sont des enregistrement physique (pas de ligne) locators, le RM exigences Clés logiques. (c) par conséquent, dans un RDb, votre question n'existe pas, nous SELECT … WHERE Key >= "value".
Il existe d'Enregistrement, les Systèmes de classement, qui n'ont aucun de l'Intégrité, de la Puissance, de Vitesse ou d'un RDb.OriginalL'auteur Ambkrish | 2015-04-27
Vous devez vous connecter pour publier un commentaire.
Requête: sql-server
Cela donnera des lignes du Tableau, où rownumber est à partir de
@N + 1
.(Et bien sûr, vous auriez normalement inclure plus de colonnes que juste l'ID, il suffit de compléter ID par une liste de champs ou de le remplacer par un astérisque dans la sélection interne)
OriginalL'auteur Vikrant
Utiliser ceci:
https://stackoverflow.com/a/19669165/1883345
Notez également que la "nouvelle" syntaxe étrangement avez une perte de performance linéaire avec le @sauter la fonction row_number approche (indexée clause order). D'autre part, la syntaxe, ont le grand avantage d'être un pur appendice, donc aucun script généré par quelque chose, se terminant avec une clause order, peut avoir de cette annexe.
OriginalL'auteur Majid Basirati
SQL Server:
Oracle jusqu'à 11.2:
Oracle 12.1 et plus tard (suivant la norme ANSI SQL)
Ils peuvent répondre à vos besoins, plus ou moins.
Il n'y a aucun moyen direct de faire ce que vous voulez par SQL.
Cependant, il n'est pas un défaut de conception, à mon avis.
SQL n'est pas censé être utilisé comme cela.
Dans les bases de données relationnelles, un tableau représente une relation est un ensemble, par définition. Un ensemble contient non ordonnée d'éléments.
Aussi, ne comptez pas sur l'ordre physique des dossiers. La ligne de commande n'est pas garanti par le SGBD.
Si le classement des dossiers est importante, vous feriez mieux d'ajouter une colonne `Num' de la table et utilisez la requête suivante. Ce qui est plus naturel.
(a) Oui, bonne Réponse. Voir mon commentaire sur la Question. (b) Dans votre dernière phrase, vous n'avez pas necessaily besoin de add une colonne, juste
ORDER BY …
quelle que soit la colonne est nécessaire, afin d'obtenir le résultat que vous avez besoin. (c) la capitalisation de l'ORDER BY.
OriginalL'auteur dzhu
Pour ce faire, dans SQL Server, vous devez commander la requête par une colonne, de sorte que vous pouvez spécifier les lignes que vous voulez.
Exemple:
OriginalL'auteur Felipe V. R.
Voulez-vous quelque chose comme dans LINQ skip 5 et prendre 10?
Cette approche permettra de travailler dans n'importe quel version SQL.
La question n'est pas sur un ordre particulier. C'est à propos du branchement N premier enregistrement d'une table. Par la voie Sélectionnez ne pas prendre au hasard, il prend des enregistrements dans l'orde ont été insérés à la table dans la première place.
C'EST certainement le sujet d'un ordre particulier, comme il peut ne pas être ceux que vous avez obtenu dans la première manche, qui est ignorée dans la seconde... Il n'ya AUCUNE garantie que vous obtenez dans un ordre particulier. Si un SQL POURRAIENT être mises en œuvre de façon séquentielle les enregistrements ajoutés inchangée serait retourné dans le même ordre - mais vous ne devriez pas le code en supposant que.... - mais même si la commande est ajoutée l'approche est mauvaise si le nombre de sauter haut
... sur l'ordre de la partie, voir par exemple dba.stackexchange.com/questions/6051/...
OriginalL'auteur Carlos Toledo
Ce sujet:
LIMIT
etOFFSET
mots-clés ne font pas partie de la norme ANSI (voir question).OriginalL'auteur Tobias
Je sais que c'est assez tard maintenant pour répondre à la requête. Mais j'ai un peu différent de la solution que les autres, qui, je crois, a de meilleures performances, car les comparaisons sont effectuées dans la requête SQL seulement le tri est fait. Vous pouvez voir ses considérable d'amélioration de la performance essentiellement lorsque la valeur du SAUT est assez GRAND.
Meilleure performance mais seulement pour SQL Server 2012 et au-dessus de. À l'origine de @Majid Basirati réponse qui vaut la peine de mentionner à nouveau.
Pas aussi Bon que le premier, mais compatible avec SQL Server 2005 et au-dessus de.
OriginalL'auteur Khurram Hassan
Cela fonctionne avec tous C'/SQL, c'est la norme ANSI:
OriginalL'auteur fspino
Dans Faircom SQL (qui est un pseudo-MySQL), je peux le faire dans un super simple Instruction SQL, juste comme suit:
Évidemment, vous pouvez juste remplacer
10
avec toute variable déclarée de votre désir.Je n'ai pas accès à MS SQL ou d'autres plates-formes, mais je serai vraiment surpris MS SQL ne supporte pas quelque chose comme ça.
OriginalL'auteur Ragno Croft
essayer ci-dessous requête, c'est le travail
Espère que cela aidera
OriginalL'auteur siddharth vara
Pour SQL Server 2012 et les versions ultérieures, la meilleure méthode est @MajidBasirati de réponse.
J'ai aussi aimé @CarlosToledo réponse, c'est pas limité à la version de SQL Server, mais il manque des Clauses Order By. Sans eux, il peut retourner des résultats incorrects.
Pour SQL Server 2008 et plus tard je voudrais utiliser des Expressions de Table Communes pour une meilleure performance.
OriginalL'auteur Jack Houston