2010-12-31 29 views
5

Tengo una tabla SQLite que necesito ordenar. Estoy familiarizado con el comando ORDER BY, pero esto no es lo que estoy tratando de lograr. Necesito la tabla completa ordenada dentro de la base de datos.Ordenar una tabla SQLite completa

Explicación:

Mi tabla utiliza una columna llamada "rowid", que establece el orden de la tabla (una llave?). Necesito ordenar la tabla por otra columna llamada "nombre" y luego reasignar números rowid en orden alfabético según 'nombre'. Se puede hacer esto?

¡Cualquier ayuda sería muy apreciada!

¡Muchas gracias!

+0

No es una buena idea nombrar una columna 'rowid'. Eso ya tiene un significado especial en SQLite. – dan04

Respuesta

2

Creo que este problema se relaciona con querer que la clave primaria signifique algo. Evita esa trampa. Elija una clave principal generada arbitrariamente que identifique de manera única una fila de datos y no tenga otro significado. De lo contrario, eventualmente se encontrará con el problema de querer alterar los valores de las claves primarias para preservar el significado.

Para una buena explicación de por qué usted debe confiar en ORDER BY para recuperar los datos en el orden deseado en lugar de asumir los datos serán de lo contrario aparecerá en una secuencia determinada por la clave principal véase la respuesta de Cruachan a un similar question

5

asumiendo que ha creado la tabla original de este modo:

CREATE TABLE my_table (rowid INTEGER PRIMARY KEY, name TEXT, somedata TEXT) ;

puede crear otra tabla ordenada así:

CREATE TABLE my_ordered_table (rowid INTEGER PRIMARY KEY, name TEXT, somedata TEXT) ;

INSERT INTO my_ordered_table (name, somedata) SELECT name,somedata FROM my_table ORDER BY name ;

Y si luego desea reemplazar la tabla orignal:

DROP TABLE my_table ;

ALTER TABLE my_ordered_table RENAME TO my_table;

Cuestiones relacionadas