首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle ROWNUM的SQLITE等价物?

问Oracle ROWNUM的SQLITE等价物?
EN

Stack Overflow用户
提问于 2012-09-02 10:57:45
回答 4查看 31.7K关注 0票数 10

我在SQLite3的一个表中添加了一个“索引”列,允许用户通过重命名旧数据库并创建一个包含额外列的新数据库来轻松地对数据进行重新排序。

我遇到的问题是,当我索引旧值时,我需要在‘INSERT...SELECT’列中给每一行一个唯一的数字。

我在Oracle中搜索到一个有用的术语,叫做ROWNUM,但是SQLite3没有这个词。在SQLite中有没有类似的东西?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-02 18:24:26

您可以使用特殊的行名ROWID、OID或_ROWID_之一来获取列的行or。有关详细信息,请参阅http://www.sqlite.org/lang_createtable.html#rowid (行可以被称为ROWID的普通列隐藏,依此类推)。

票数 13
EN

Stack Overflow用户

发布于 2012-09-02 17:23:18

没有SQLite没有直接等同于Oracle的ROWNUM。

如果我正确理解了您的要求,您应该能够以这种方式根据旧表的顺序添加编号列:

代码语言:javascript
复制
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;

新表包含:

代码语言:javascript
复制
.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。

票数 8
EN

Stack Overflow用户

发布于 2019-03-22 16:38:36

这里的许多人似乎把ROWNUM和ROWID搞混了。它们是不同的概念,Oracle同时拥有这两个概念。

ROWID是数据库行的唯一ID。它几乎是不变的(在导入/导出过程中更改,但在不同的SQL查询中是相同的)。

ROWNUM是与查询结果中的行号对应的计算字段。第一行总是为1,第二行总是2,依此类推。它绝对没有链接到任何表行,并且相同的表行可以有非常不同的行号,这取决于它是如何查询的。

Sqlite有ROWID,但没有ROWNUM。我找到的唯一等效函数是ROW_NUMBER()函数(请参阅http://www.sqlitetutorial.net/sqlite-window-functions/sqlite-row_number/)。

您可以使用如下查询来实现您想要的结果:

代码语言:javascript
复制
insert into new 
    select *, row_number() over () 
    from old;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12233091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档