2012-01-23 81 views
10

Select语句我想写SQLite的说法是这样的:SQLite中识别行号

SELECT * FROM Table WHERE RowNumber BETWEEN 1 AND 10; 

,但我没有这样的列ROWNUMBER。我的表中有主键。但是,有没有行号默认情况下,我可以使用?

此外,我正在搜索有关编写更复杂的SQLite语句的信息。所以如果你在书签中有一些链接,请分享。

谢谢。

+0

这里是帮了我一些额外的信息。就我而言,我对一组任意的rowid感兴趣。 http://stackoverflow.com/questions/33512086/retrieve-sqlite-rows-by-rowid-efficiently/33512116#33512116 –

回答

26

你想用LIMIT and OFFSET

SELECT * FROM Table LIMIT 10 OFFSET 0 
+2

只是出于好奇。为什么你需要OFFSET 0? SELECT * FROM table LIMIT 10是否不够? – Tooroop

+0

你是对的,如果从0开始,offset是可选的。我可能只是习惯性地写出来的。 –

-1
SELECT * FROM Table WHERE ROWID BETWEEN 1 AND 10; 
+0

从1到10的rowid选择不会授予您将返回10行,它不保证即使1行将被返回。 – kurast

+0

我想不是,如果表是空的..我想看到一个查询.. – StevieG

+6

Rowid只是保证在sqlite中是唯一的,不保证是连续的。只是在接种疫苗命令后,他们从一个接一个地调整。大多数情况下,你提出的建议都可行。但如果我这样做: 选择*从表1到10之间的行之间的行; - 返回十行 从表中删除1到10之间的行; SELECT * FROM TABLE WHERE ROWID BETWEEN 1 AND 10; - 即使剩余的线条在桌子上吃完,也会返回零线。 VACCUUM; - 重新排列rowid SELECT * FROM表WHERE ROWID BETWEEN 1 AND 10; - 再次返回十行 – kurast

3

自动创建的表的rowid可以通过几个不同的名称访问。从SQLite documentation

每SQLite表的每一行都有一个唯一标识的表中的行中的64位有符号整数的关键。这个整数通常被称为“rowid”。可以使用特殊大小写无关名称“rowid”,“oid”或“_rowid_”替代列名称来访问rowid值。

+0

'rowid'是一个隐藏的强大领域,谢谢。 –