4

我有一个这样的 Sqlite 数据库表(没有升序

在此处输入图像描述

但是我需要按名称按升序检索表,当我将其设置为升序时,rowId 以混乱的顺序更改如下

在此处输入图像描述

但我每次都需要按升序检索一些有限数量的联系人 5

Aaa - Eeee然后Ffff- Jjjjj ......

但是要设置 0-5 5-10 之类的限制 .... ** 它可以使用 rowid,因为它们的顺序是混乱的

所以我需要另一列,如(oracle中的rowNum),其顺序为1234567 ...每次如下

在此处输入图像描述

如何使用现有列检索该列

Note: WE DONTE HAVE ROWNUM LIKE COLUMN IN SQLITE

4

3 回答 3

17

假的 rownum 解决方案很聪明,但恐怕它不能很好地扩展(对于复杂的查询,你必须在每一行上加入并计算当前行之前的行数)。

我会考虑使用create table tmp as select /*your query*/. 因为在创建为选择操作的情况下,插入行时创建的 rowid 正是 rownum(计数器)。它由 SQLite 文档指定。

插入初始查询后,您只需查询 tmp 表:

select rowid, /* your columns */ from tmp
order by rowid
于 2013-10-05T15:09:20.950 回答
6

您可以使用偏移量/限制。

获取第一组、第二组和第三组五行:

select rowid, name from contactinfo order by name limit 0, 5
select rowid, name from contactinfo order by name limit 5, 5
select rowid, name from contactinfo order by name limit 10, 5

警告,使用上述语法需要 SQLite 以排序顺序读取所有先前的记录。因此,要获取 SQLite 上面第 3 条语句的第 10 条记录,需要读取前 9 条记录。如果您有大量记录,从性能的角度来看,这可能会出现问题。

有关限制/偏移的更多信息:

Sqlite 查询优化(使用 Limit 和 Offset)

Sqlite LIMIT / OFFSET 查询

于 2012-12-24T16:41:56.593 回答
2

这是一种伪造 RowNum 的方法,希望对您有所帮助:

SELECT 
   (SELECT COUNT(*)
    FROM Names AS t2
    WHERE t2.name < t1.name
   ) + (
      SELECT COUNT(*) 
      FROM Names AS t3 
      WHERE t3.name = t1.name AND t3.id < t1.id
   ) AS rowNum,
   id,
   name
FROM Names t1
ORDER BY t1.name ASC

SQL 小提琴示例

于 2012-12-24T16:00:46.210 回答