9
votes

SQLite équivalent pour Rownum Oracle?

J'ajoute une colonne «index» à une table dans SQLite3 pour permettre aux utilisateurs de réorganiser facilement les données, en renommant l'ancienne base de données et en créant un nouveau à sa place avec les colonnes supplémentaires.

Le problème que j'ai est que je dois donner à chaque ligne un numéro unique dans la colonne "Index" lorsque j'insère ... Sélectionnez les anciennes valeurs.

Une recherche que j'ai fait un terme utile à Oracle appelé Rownum, mais SQLite3 n'a pas cela. Y a-t-il quelque chose d'équivalent dans SQLite?


0 commentaires

4 Réponses :


8
votes

Aucun SQLite n'a pas d'équivalent direct à l'oracle's Rownum.

Si je comprends votre exigence correctement, vous devriez pouvoir ajouter une colonne numérotée basée sur la commande de l'ancienne table de cette façon: < pré> xxx

La nouvelle table contient: xxx

autooincrerement fait quel nom suggère: chaque ligne supplémentaire a le "valeur précédente incrémentée de 1.


1 commentaires

Manque complètement le point. Rownum est dynamique, s'applique à toutes les tables.



13
votes

Vous pouvez utiliser l'un des noms de lignes spéciaux Rowid , OID ou _rowid _ pour obtenir le Rowid d'une colonne. Voir http://www.sqlite.org/lang_creatier.html#rowid.html#rowid Pour plus de détails (et que les rangées peut être masqué par des colonnes normales appelées rowid et ainsi de suite).


3 commentaires

Sélectionnez Rowid à partir de Devrait vous renvoyer le numéro de ligne unique pour chaque enregistrement. Cela équivaut à Rownum.


Pas exactement. Oracles Rownum s'applique au résultat de la requête. Sélectionnez Rownum de TBL où ROWNUM> 3 ne trouvera rien (car la première ligne où cela serait vrai, obtenez le Rownum 1). Mais ce n'est pas l'exigence de l'OPS. Il a juste besoin d'une valeur unique.


OK, ce n'est peut-être pas «exactement» comme Rownum, mais c'est l'identifiant unique pour chaque ligne ajoutée automatiquement. C'est l'exigence de @ RaceImaztion.



6
votes

Beaucoup de gens ici semblent mélanger Rownum avec Rowid . Ils ne sont pas le même concept et l'oracle a les deux.

Rowid est un identifiant unique d'une ligne de base de données. C'est presque invariant (changé lors de l'importation / à l'exportation, mais c'est la même chose entre les différentes requêtes SQL).

ROWNUM est un champ calculé correspondant au numéro de ligne dans le résultat de la requête. C'est toujours 1 pour la première rangée, 2 pour la seconde, et ainsi de suite. Il n'est absolument pas lié à une rangée de table et la même rangée de table pourrait avoir des rownums très différents en fonction de la façon dont il est interrogé.

SQLite a un rabochant mais pas de rownum. Le seul équivalent que j'ai trouvé est fonction Row_Number () (voir http://www.sqlitetorial.net/sqlite-window-fonctions/sqlite-row_number/ ).

Vous pouvez obtenir ce que vous voulez avec une requête comme celle-ci: xxx


0 commentaires

0
votes

Je pense que vous voulez utiliser la limite de contrainte en SQLite. Sélectionnez * à partir du tableau peut renvoyer des milliers d'enregistrements. Cependant, vous pouvez contraindre ceci en ajoutant le mot-clé limite .

Sélectionnez * à partir de la limite de table 5; Retournera les 5 premiers enregistrements de la table renvoyée dans votre requête - si disponible


0 commentaires