我的问题是:
select * from mytable order by mycol_1 OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY;
现在,如果在这个迭代中,我从上述查询获取的10条记录中删除了几条记录,然后运行:
select * from mytable order by mycol_1 OFFSET 10 ROWS FETCH FIRST 10 ROWS ONLY;
我将获得真正的下10条记录,还是sql引擎将某些行上移,从而跳过某些行?
我的问题是:
select * from mytable order by mycol_1 OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY;
现在,如果在这个迭代中,我从上述查询获取的10条记录中删除了几条记录,然后运行:
select * from mytable order by mycol_1 OFFSET 10 ROWS FETCH FIRST 10 ROWS ONLY;
我将获得真正的下10条记录,还是sql引擎将某些行上移,从而跳过某些行?
1条答案
按热度按时间hfyxw5xn1#
例如:如果您有20行(假设这些是从1到20的序数)并删除例如2、4、6、8、10,然后运行第2条语句(
offset 10
):它将“跳过”值1、3、5、7、9、11、12、13、14、15(使offset=10)并从16开始返回值。如果你再次使用
offset 0
,您将得到1、3、5、7、9、11、12、13、14、15,这意味着不会跳过任何内容(当然,除了已删除的行,它们不再存在)。基本上,这意味着你可以省略
OFFSET
与…一起工作FETCH FIRST 10 ROWS ONLY
选项。顺便说一下,你使用
order by
条款;我见过一些人“希望”查询会自动返回行,他们认为“sql会返回,但是-没有order by
条款,这是不可预测的。