我想通过 2 个不同的来源进行分页。我想我可以使用将 2 个查询合并为一个的方法来做到这一点,但是,我不想并行合并它们。
是否可以选择第一个查询的大小,所以我可以限制第二个查询的大小;允许我正确分页;首先通过第一个查询;如果部分/没有结果;然后通过第二个查询分页。
我显然可以在我的应用程序级别实现这一点,但我更喜欢单个查询。
想了想,或许我可以做这样的事情?
with a as (... offset :offset limit :limit),
a_count as (select count(*) from a)
select * a
union
select ...
offset (select count from a_count)
limit greatest(:limit - (select count from a_count), 0)
这有效率吗?我可以改进什么?
简单地:
添加
source
是可选的。除非使用括号,否则
LIMIT
/OFFSET
适用于组合结果集。结合UNION ALL
, 并且没有 outerORDER BY
,您a
首先从表中获取行,然后从表中获取行b
。如果您需要特定的排序顺序,请
ORDER BY
使用括号添加每个表。喜欢:还是没有外挂
ORDER BY
!但是,
LIMIT
/OFFEST
用于分页的比例对于大表来说非常糟糕。改为考虑: