2012-09-02 17 views
7

SQLite3のテーブルに 'index'カラムを追加して、古いデータベースの名前を変更し、余分なカラムを使って新しいデータベースを作成することで、ユーザが簡単にデータを並べ替えることを可能にします。OracleのROWNUMに相当するSQLite?

私が問題にしているのは、私がINSERT ... SELECTの古い値を選択するときに、各行に 'index'カラムに一意の数値を与える必要があるということです。

検索OracleでROWNUMと呼ばれる有益な用語が見つかりましたが、SQLite3にはそのような用語はありません。 SQLiteに相当するものはありますか?

答えて

10

特殊な行名ROWIDOIDまたは_ROWID_を使用して列のROWIDを取得します。詳細については、http://www.sqlite.org/lang_createtable.html#rowidを参照してください(行はROWIDと呼ばれる通常の列で隠すことができます)。

+0

SELECT ROWID FROM は、すべてのレコードの一意の行番号を返します。これはROWNUMに相当します。 –

+6

正確ではありません。 OROcles ROWNUMはクエリの* result *に適用されます。 'rownum FROM tbl where rownum> 3'は何も見つけません(最初の行が真になるのでrownum 1を取得します)。しかし、これはOPの要件ではありません。彼はただの価値が必要です。 –

+1

これはROWNUMと「正確に」同じではないかもしれませんが、自動的に追加される各行の一意のIDです。これは@ Raceimaztionの要件です。 –

7

SQLiteには、OracleのROWNUMに直接相当するものはありません。

私が正しくあなたの条件を理解していれば、あなたは古いテーブルの順序にこの方法をベース番列を追加することができるはずです。

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; 

新しいテーブルが含まれています

.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は、その名前が示唆していることを行います。追加の各行は、前に1ずつ増えた値を持ちます。

+0

もちろん、同等のものがあり、ROWIDを使用します。 –

関連する問題