我正在向SQLite3中的表添加'索引'列,以允許用戶輕鬆地重新排序數據,方法是重命名舊數據庫並在其位置創建一個具有額外列的新數據庫。用於Oracle ROWNUM的SQLITE等價物?
我遇到的問題是,我需要給每一行'索引'列中的唯一編號時,我插入...選擇舊的值。
我在Oracle中搜索過一個名爲ROWNUM的有用術語,但SQLite3沒有。在SQLite中有什麼等價的東西嗎?
我正在向SQLite3中的表添加'索引'列,以允許用戶輕鬆地重新排序數據,方法是重命名舊數據庫並在其位置創建一個具有額外列的新數據庫。用於Oracle ROWNUM的SQLITE等價物?
我遇到的問題是,我需要給每一行'索引'列中的唯一編號時,我插入...選擇舊的值。
我在Oracle中搜索過一個名爲ROWNUM的有用術語,但SQLite3沒有。在SQLite中有什麼等價的東西嗎?
您可以使用其中一個特殊行名稱ROWID
,OID
或_ROWID_
以獲得列的rowid。有關更多詳細信息,請參閱http://www.sqlite.org/lang_createtable.html#rowid(並且可以通過名爲ROWID
等的普通列隱藏行)。
沒有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.
當然有一個等價的,使用rowid。 –
SELECT rowid FROM應該爲您返回每個記錄的唯一行號。這相當於ROWNUM。 –
不完全。 ORACLE ROWNUM適用於查詢的* result *。 '選擇rownum從tbl WHERE rownum> 3'什麼也找不到(因爲第一行這是真的會得到rownum 1)。但這不是OP的要求。他只需要一個獨特的價值。 –
好吧,它可能與ROWNUM「不完全一樣」,但它是每行自動添加的唯一ID。這是@ Raceimaztion的要求。 –