我正在向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的要求。 –