2012-01-23 21 views
10

quiero escribir SQLite comunicado algo como esto:instrucción Select en SQLite reconocer fila número

SELECT * FROM Table WHERE RowNumber BETWEEN 1 AND 10; 

pero no tienen tales RowNumber columna. Tengo clave principal en mi mesa. Pero, ¿hay un número de fila predeterminado que pueda usar?

También estoy buscando información sobre cómo escribir una declaración SQLite más complicada. Entonces, si tienes algunos enlaces en marcadores, comparte.

Gracias.

+0

Aquí hay alguna información adicional que me ayudó. En mi caso, estaba interesado en un conjunto arbitrario de rowid. http://stackoverflow.com/questions/33512086/retrieve-sqlite-rows- by -rowid-efficiently/33512116#33512116 –

Respuesta

26

que desea utilizar LIMIT and OFFSET

SELECT * FROM Table LIMIT 10 OFFSET 0 
+2

solo por curiosidad. ¿Por qué necesitas OFFSET 0? ¿No es suficiente SELECCIONAR * DE la tabla LÍMITE 10? – Tooroop

+0

Tiene razón, el desplazamiento es opcional si se comienza desde 0. Probablemente lo acabo de escribir por costumbre. –

-1
SELECT * FROM Table WHERE ROWID BETWEEN 1 AND 10; 
+0

Al seleccionar rowid de 1 a 10 no se garantiza que se devolverán 10 filas, no se garantiza que incluso 1 fila será devuelta. – kurast

+0

Supongo que no, si la tabla está vacía ... Me gustaría ver una consulta que sí lo haga .. – StevieG

+6

Se garantiza que los Rowids son únicos en sqlite, no se garantiza que sean secuenciales. Solo después de un comando de vacío, se ajustan secuencialmente a partir de uno. La mayoría de las veces lo que propones funcionaría. Pero si lo hago: SELECCIONE * FROM Table WHERE ROWID ENTRE 1 Y 10; - devuelve diez líneas ELIMINAR DE LA Tabla WHERE ROWID ENTRE 1 Y 10; SELECCIONAR * FROM Tabla WHERE ROWID ENTRE 1 Y 10; - devuelve cero líneas, incluso si hay líneas restantes en la mesa. VACCUUM; --reordena los rowids SELECT * FROM Table WHERE ROWID ENTRE 1 Y 10; - devuelve diez líneas de nuevo – kurast

3

Se puede acceder al rowid creado automáticamente para una tabla con algunos nombres diferentes. Del SQLite documentation:

Cada fila de cada tabla SQLite tiene una clave de entero de 64 bits que identifica de manera única la fila dentro de su tabla. Este entero generalmente se llama "rowid". Se puede acceder al valor rowid usando uno de los nombres independientes de casos especiales "rowid", "oid" o "_rowid_" en lugar de un nombre de columna.

+0

'rowid' es un poderoso campo oculto, gracias. –

Cuestiones relacionadas