【发布时间】:2022-01-04 11:29:32
【问题描述】:
我有一个视图,它从不同的源表中读取并返回约 4000 万行。现在,我想使用 LIMIT 和 OFFSET 分批提取这些数据。
SELECT * FROM combined_view LIMIT 1000000 OFFSET 0;
SELECT * FROM combined_view LIMIT 1000000 OFFSET 1000000
等等
但是,为了保持一致并避免重叠/丢失行,此 SELECT 应按某种唯一 id 排序,以便每个 SELECT 以相同顺序返回所有行(然后按 LIMIT 和 OFFSET 过滤)。
我正在考虑从此视图创建一个临时表,然后从该表中读取(因为每个表都有 row_id),但我不确定,这是最好的解决方案。
请指教。
【问题讨论】:
-
select * from final_trips order by trip_id limit 10 offset 10;使用 create table 使用此命令 create table st as select * from final_trips order by trip_id limit 10 offset 10;
-
我不明白你的问题。你知道
row_id,那么为什么不使用ORDER BY row_id LIMIT ...。为什么需要临时表? -
@forpas 没有用于查看的 row_id。正如我所提到的,数据来自具有一些连接/联合等的不同表。尝试 select * from combined_view order by row_id limit 1000000 将导致结果:没有这样的列:row_id
-
@forpas 在从此视图中选择时使用 rowid 将返回所有值 = Null 的列,也已检查
-
我错过了您问题中的所有视图部分!您可以修改视图以选择所涉及表的 rowid 吗?
create view combined_view as select t1.*, t1.rowid as rowid1, t2.*, t2.rowid as rowid2 from t1,..t2 ,,, order by rowid1, rowid2 ....之类的东西?
标签: sql sqlite sql-order-by limit offset