SQLITE相当于Oracle的ROWNUM?(SQLITE equivalent for Orac

2019-06-27 16:24发布

我在sqlite3的添加“索引”列一个表,让用户可以轻松地对数据重新排序,通过重命名旧的数据库和建立在其位置一个新的与额外的列。

我的问题是,我需要给每一行的唯一编号的“索引”列当我插入...选择旧值。

我打开了Oracle中的有用项的搜索名为ROWNUM,但sqlite3的不有。 是否有SQLite的东西等同?

Answer 1:

您可以使用特殊的行名称的一个ROWIDOID_ROWID_得到一个列的ROWID。 见http://www.sqlite.org/lang_createtable.html#rowid进一步的细节(这行可以通过所谓的正常列隐藏ROWID等)。



Answer 2:

没有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先前的价值。



Answer 3:

很多人在这里似乎混淆了ROWNUMROWID。 他们是不一样的概念,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;


Answer 4:

select rowid, * from exampleTable

SQLite是已经为您添加ROWID,没有必要做两次相同。 请注意,ROWID将被sqlite的插入,当旧的被删除了很多后可重复使用。



文章来源: SQLITE equivalent for Oracle's ROWNUM?