2012-09-02 22 views
7

SQLite3'teki bir tablonun bir 'index' sütunu ekleyerek, kullanıcıların eski veritabanını yeniden adlandırarak ve ekstra sütunlarla yerine yeni bir tane oluşturarak, verileri kolayca yeniden sıralamasına izin vermek için kullanıyorum.SQLITE eşdeğeri?

Sahip olduğum sorun, her satırı, INSERT ... 'i seçtiğimde' index 'sütununa benzersiz bir sayı vermem gerektiğidir.

Bir arama Oracle'da ROWNUM adlı kullanışlı bir terim haline getirdim, ancak SQLite3 buna sahip değil. SQLite'de bir şey var mı?

cevap

10

Özel satır adlarından birini kullanabilirsinizBir sütunun satır aralığını almak için, OID veya _ROWID_. Daha fazla ayrıntı için bkz. http://www.sqlite.org/lang_createtable.html#rowid (ve satırların ROWID adlı normal sütunlar tarafından gizlenebileceği vb.).

+0

SELECT rowid , her kayıt için benzersiz satır numarasını döndürmelidir. Bu ROWNUM ile eşdeğerdir. –

+6

Tam olarak değil. Oracles ROWNUM, sorgunun * sonucu * için geçerlidir. 'SELECT rownum tbl'DAN robertum> 3' hiçbir şey bulamayacaktır (çünkü bunun gerçekleşeceği ilk satır, 1 numaralı rotayı alır). Ancak bu OP gerekliliği değildir. Sadece eşsiz bir değere ihtiyacı var. –

+1

Tamam, ROWNUM ile "tam olarak" aynı olmayabilir, ancak otomatik olarak eklenen her satırın benzersiz kimliği de budur. Bu, Raceimaztion'ın şartı. –

7

Hiçbir SQLite'nin Oracle'ın ROWNUM'una doğrudan bir karşılığı yoktur.

Ben doğru gereksinimi anlamak, eski tablonun sıraya dayanan bu yolu numaralı sütun eklemek gerekir:

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; 

yeni tablo içerir:

.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 

AUTOINCREMENT, adından da anlaşılacağı gibi yapar: her ek satırın önceki değeri 1 artırılır.

+0

Tabi ki bir eşdeğerdir, rowid kullanın. –