所以我可以用LIMIT
和OFFSET
分页查询
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