2012-09-02 28 views
7

Estoy agregando una columna 'index' a una tabla en SQLite3 para permitir a los usuarios reordenar fácilmente los datos, al renombrar la base de datos anterior y crear una nueva en su lugar con las columnas adicionales.SQLite equivalente para Oracle ROWNUM?

El problema que tengo es que necesito dar a cada fila un número único en la columna 'índice' cuando INSERTO ... SELECCIONE los valores anteriores.

Una búsqueda que hice apareció un término útil en Oracle llamado ROWNUM, pero SQLite3 no tiene eso. ¿Hay algo equivalente en SQLite?

Respuesta

10

Puede usar uno de los nombres de fila especiales ROWID, OID o _ROWID_ para obtener el hilera de una columna. Vea http://www.sqlite.org/lang_createtable.html#rowid para más detalles (y que las filas pueden ser ocultas por columnas normales llamadas ROWID y así sucesivamente).

+0

SELECCIONAR rowid FROM debe devolverle el número de fila única para cada registro. Esto es equivalente a ROWNUM. –

+6

No exactamente. Oracles ROWNUM se aplica al * resultado * de la consulta. 'SELECT rownum FROM tbl DONDE rownum> 3' no encontrará nada (porque la primera fila donde esto sería cierto obtiene el rownum 1). Pero este no es el requisito de OP. Él solo necesita un valor único. –

+1

Ok, puede que no sea "exactamente" lo mismo que ROWNUM, pero es el ID único para cada fila agregada automáticamente. Este es el requisito de @ Raceimaztion. –

7

Ningún SQLite no tiene un equivalente directo al ROWNUM de Oracle.

Si entiendo su requerimiento correctamente, debería ser capaz de añadir una columna numerada en base a pedidos de la mesa de edad de esta manera:

create table old (col1, col2); 

insert into old values 
    ('d', 3), 
    ('s', 3), 
    ('d', 1), 
    ('w', 45), 
    ('b', 5465), 
    ('w', 3), 
    ('b', 23); 

create table new (colPK INTEGER PRIMARY KEY AUTOINCREMENT, col1, col2); 

insert into new select NULL, col1, col2 from old order by col1, col2; 

La nueva tabla contiene:

.headers on 
.mode column 

select * from new; 

colPK  col1  col2  
---------- ---------- ---------- 
1   b   23   
2   b   5465  
3   d   1   
4   d   3   
5   s   3   
6   w   3   
7   w   45 

El AUTOINCREMENT hace lo que sugiere su nombre: cada fila adicional tiene el valor anterior 'incrementado en 1.

+0

Por supuesto, hay un equivalente, use rowid. –

Cuestiones relacionadas