【问题标题】:Select statement in SQLite recognizing row numberSQLite中的选择语句识别行号
【发布时间】:2012-02-17 02:45:25
【问题描述】:

我想写这样的 SQLite 语句:

SELECT * FROM Table WHERE RowNumber BETWEEN 1 AND 10;

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

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

谢谢。

【问题讨论】:

标签: sql ios sqlite


【解决方案1】:

你想使用LIMIT and OFFSET

SELECT * FROM Table LIMIT 10 OFFSET 0

也可以用以下简写语法表示

SELECT * FROM Table LIMIT X,Y

其中X代表偏移量,是排他的,Y代表数量,例如

SELECT * FROM Table LIMIT 50,50

将返回第 51-100 行

【讨论】:

  • 只是出于好奇。为什么需要偏移量 0? SELECT * FROM table LIMIT 10 还不够吗?
  • 你说得对,offset从0开始是可选的。我可能只是出于习惯而写的。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:
    SELECT * FROM Table WHERE ROWID BETWEEN 1 AND 10; 
    

    【讨论】:

    • 从 1 到 10 的 rowid 中选择并不能保证返回 10 行,也不能保证即使返回 1 行。
    • Rowid 只保证在 sqlite 中是唯一的,不保证是连续的。只有在 vaccumm 命令之后,它们才会从一个开始顺序调整。大多数情况下,您提出的建议会奏效。但如果我这样做: SELECT * FROM Table WHERE ROWID BETWEEN BETWEEN 1 AND 10; --返回十行 DELETE FROM Table WHERE ROWID BETWEEN BETWEEN 1 和 10; SELECT * FROM Table WHERE ROWID BETWEEN 1 和 10; --返回零行,即使有剩余的行吃掉了桌子。真空; --reorders the rowids SELECT * FROM Table WHERE ROWID BETWEEN 1 AND 10; --再次返回十行
    猜你喜欢
    • 2011-07-05
    • 2013-07-13
    • 2015-10-04
    • 2014-11-27
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多