我在sqlite3的添加“索引”列一个表,让用户可以轻松地对数据重新排序,通过重命名旧的数据库和建立在其位置一个新的与额外的列。
我的问题是,我需要给每一行的唯一编号的“索引”列当我插入...选择旧值。
我打开了Oracle中的有用项的搜索名为ROWNUM,但sqlite3的不有。 是否有SQLite的东西等同?
我在sqlite3的添加“索引”列一个表,让用户可以轻松地对数据重新排序,通过重命名旧的数据库和建立在其位置一个新的与额外的列。
我的问题是,我需要给每一行的唯一编号的“索引”列当我插入...选择旧值。
我打开了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先前的价值。
很多人在这里似乎混淆了ROWNUM与ROWID。 他们是不一样的概念,Oracle有两种。
ROWID是数据库行的唯一ID。 这几乎是不变的(导入/导出过程中改变,但它是在不同的SQL查询相同)。
ROWNUM是对应于查询结果中的行数的计算的字段。 它总是1第一行,2表示第二个,依此类推。 这是绝对不与任何表行和相同的表行可以有很大的不同rownums取决于它是如何查询。
SQLite的有一个ROWID,但没有ROWNUM。 我发现的只相当于是ROW_NUMBER()函数(见http://www.sqlitetutorial.net/sqlite-window-functions/sqlite-row_number/ )。
你可以达到你想要这样的查询内容:
insert into new
select *, row_number() over ()
from old;
select rowid, * from exampleTable
SQLite是已经为您添加ROWID,没有必要做两次相同。 请注意,ROWID将被sqlite的插入,当旧的被删除了很多后可重复使用。