Sqlite顺序后限制偏移量



所以我可以用LIMITOFFSET分页查询

SELECT * 
FROM db.table
LIMIT 6
OFFSET 0

但是如果我尝试ORDER BY这个结果,我得到第一个n有序行,而不是第一个n有序行。

SELECT * 
FROM db.table
LIMIT 6
OFFSET 0
ORDER BY first_name COLLATE NOCASE

所以不用

bob
charles
dave
dan
doug
durrand

我想得到

bob
doug
elliot
manny
ralph
xavier

您想要一个子查询:

SELECT t.*
FROM (SELECT * 
      FROM db.table
      LIMIT 6 OFFSET 0
     ) t
ORDER BY first_name COLLATE NOCASE;

请注意,这实际上返回一组不确定的行,然后对其排序。

除非使用order by,否则不能保证返回相同的行集。

"前n行"在这种情况下没有意义。表没有内在的顺序;你必须指定它。通常,这是通过一些ID列来完成的,该列自动增加以跟踪插入的顺序(这可能是您的意思)。

您在order BY子句中指定了顺序,这就是它以这种方式排序的原因。但是,如果您有一个ID列,则可以执行如下子选择:

select name from (
    select name from foo
    order by id
    limit...
) order by name

最新更新