Postgresql
您可以通過 1 個查詢並行分頁 2 個表嗎
我想通過 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)
這有效率嗎?我可以改進什麼?
簡單地:
SELECT 'a' AS source, * FROM a UNION ALL -- NOT just UNION!! SELECT 'b' AS source, * FROM b -- matching row type! OFFSET :offset LIMIT :limit;
添加
source
是可選的。除非使用括號,否則
LIMIT
/OFFSET
適用於組合結果集。結合UNION ALL
, 並且沒有 outerORDER BY
,您a
首先從表中獲取行,然後從表中獲取行b
。如果您需要特定的排序順序,請
ORDER BY
使用括號添加每個表。像:(SELECT * FROM a ORDER BY foo) UNION ALL (SELECT * FROM b ORDER BY bar) OFFSET :offset LIMIT :limit;
還是沒有外掛
ORDER BY
!但是,
LIMIT
/OFFEST
用於分頁的比例對於大表來說非常糟糕。改為考慮: