SQLITE等效于Oracle的ROWNUM?

SQLITE等效于Oracle的ROWNUM?,sqlite,insert-select,Sqlite,Insert Select,我将在SQLite3中的表中添加一个“索引”列,以允许用户通过重命名旧数据库并使用额外的列在其位置创建一个新数据库来轻松地重新排序数据 我的问题是,当我插入…选择旧值时,我需要在“索引”列中为每一行指定一个唯一的数字 我在Oracle中搜索到了一个有用的术语ROWNUM,但SQLite3没有。SQLite中是否有等价物?没有SQLite与Oracle的ROWNUM没有直接等价物 如果我正确理解您的要求,您应该能够按照旧表的顺序添加一个编号列,如下所示: create table old (col

我将在SQLite3中的表中添加一个“索引”列,以允许用户通过重命名旧数据库并使用额外的列在其位置创建一个新数据库来轻松地重新排序数据

我的问题是,当我插入…选择旧值时,我需要在“索引”列中为每一行指定一个唯一的数字


我在Oracle中搜索到了一个有用的术语ROWNUM,但SQLite3没有。SQLite中是否有等价物?

没有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

自动增量按其名称执行:每增加一行,前一行的值递增1。

您可以使用一个特殊的行名称ROWID、OID或_ROWID_u来获取列的ROWID。有关更多详细信息,请参阅,这些行可以被称为ROWID等的普通列隐藏。

这里的许多人似乎把ROWNUM和ROWID混淆了。它们不是同一个概念,Oracle两者都有

ROWID是数据库行的唯一ID。它在导入/导出期间几乎不变,但在不同的SQL查询中是相同的

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

Sqlite有一个ROWID,但没有ROWNUM。我找到的唯一等效函数是ROW_NUMBER函数,请参见

您可以通过以下查询实现所需:

insert into new 
    select *, row_number() over () 
    from old;

我相信您希望在SQLite中使用约束限制。 从表中选择*可以返回数千条记录。 但是,您可以通过添加LIMIT关键字来约束这一点

从表5中选择*;
将从查询中返回的表中返回前5条记录-如果可用

SELECT rowid from应为每条记录返回唯一的行号。这相当于ROWNUM。不完全相同。Oracles ROWNUM应用于查询结果。从tbl中选择rownum,其中rownum>3将找不到任何内容,因为这将为真的第一行将获得rownum 1。但这不是老年退休金计划的要求。他只需要一个唯一的值。好的,它可能与ROWNUM不完全相同,但它是自动添加的每一行的唯一id。这是@Raceimaztion的要求。完全没有抓住要点。ROWNUM是动态的,适用于所有表。