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
SELECT (SELECT COUNT(*)
FROM main AS t2
WHERE t2.col1 < t1.col1) + (SELECT COUNT(*)
FROM main AS t3
WHERE t3.col1 = t1.col1 AND t3.col1 < t1.col1) AS rowNum, * FROM Table_name t1 WHERE rowNum=0 ORDER BY t1.col1 ASC
5条答案
按热度按时间eit6fx6z1#
您可以使用特殊的行名称
ROWID
、OID
或_ROWID_
之一来获取列的rowid。Seewww.example. www.example.com 了解更多细节(行可以被称为ROWID
等的普通列隐藏)。2cmtqfgy2#
这里的许多人似乎将ROWNUM与ROWID混淆。它们不是同一个概念,Oracle两者都有。
ROWID是数据库ROW的唯一ID。它几乎是不变的(在导入/导出过程中更改,但在不同的SQL查询中相同)。
ROWNUM为查询结果行号对应的计算字段。第一行始终为1,第二行始终为2,依此类推。它绝对没有链接到任何表行,同一个表行可能有非常不同的行号,这取决于它是如何查询的。
Sqlite有ROWID但没有ROWNUM。我找到的唯一等价函数是**ROW_NUMBER()**函数(参见http://www.sqlitetutorial.net/sqlite-window-functions/sqlite-row_number/)。
你可以通过这样的查询来实现你想要的:
irlmq6kh3#
没有SQLite没有直接等价于Oracle的ROWNUM。
如果我正确理解了您的需求,您应该能够通过以下方式根据旧表的顺序添加一个编号列:
新表包含:
AUTOINCREMENT
的功能正如它的名字所暗示的那样:每一附加行具有递增1的“前一个”值。xdnvmnnf4#
我相信你想在SQLite中使用约束LIMIT。
SELECT * FROM TABLE
可以返回数千条记录。但是,您可以通过添加LIMIT
关键字来限制此操作。SELECT * FROM TABLE LIMIT 5;
将返回查询中返回的表中的前5条记录-如果可用2nbm6dog5#
使用此代码创建Row_num 0。...count_row