【发布时间】:2011-02-08 09:52:23
【问题描述】:
我想实现或使用允许在 SQLite 中单步执行表的功能。
如果我有一个有 100k 行的表 Products,我想一次检索可能 10k 行。类似于网页如何列出数据并有一个< Previous .. Next > 链接来浏览数据。
是否有选择语句可以使这变得简单?我看到并尝试将 ROWID 与 LIMIT 结合使用,如果不对数据进行排序,这似乎没问题。
// 如果不订购,这似乎可行。
SELECT * FROM Products WHERE ROWID BETWEEN x AND y;
【问题讨论】:
-
如果对行进行排序会发生什么?
-
如果没有明确指定,ROWID 仍然可用,但不保证是静态的。也就是说,隐式 ROWID 将由行在表中物理写入的顺序确定。所以如果表是按Name按顺序存储的,而我想按QTY排序,ROWID不会代表返回的顺序而是隐含的ROW编号。
-
您确实应该在 SQL 工作中尽可能避免使用任何内置的 ROWID。它实际上并不是 SQL 标准的一部分,它是一个附加组件,不能保证在大多数 RDBMS 上都存在。我会使用 ORDER BY 子句来创建排序。我发现大多数查询都可以在不依赖隐式行号的情况下编写,只需一点想象力。
-
您需要对行进行排序吗?听起来你不必这样做。如果您使用 SB 的答案,您可以按照 SQLite 默认返回数据的任何顺序进行。
-
@sheepsimulator:我同意,我过去从未使用过它(因为如果需要,最好创建一个显式的)。但是,我想不出任何其他方式来访问特定范围的行。 LIMIT+OFFSET 完美地做到了这一点,我只是没有意识到它是可用的。