PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como aplicar paginação ao resultado de uma consulta SQL com Joins?


É engraçado como escrever uma pergunta faz você pensar e, na verdade, ajuda muito a imaginar uma solução para o seu próprio problema.

Consegui resolver esse problema simplesmente adicionando a parte de paginação da consulta a uma subconsulta da minha consulta principal, em vez da própria consulta principal.

Por exemplo, em vez de fazer:
SELECT client.id, client.name ...
FROM clients AS client
LEFT JOIN client_account_types AS cat ON client.id = cat.client_id
FULL JOIN account_types AS at ON cat.account_type_id = at.id
ORDER BY client.name ASC
LIMIT 10 OFFSET 30;

Eu estou fazendo isso:
SELECT client.id, client.name ...
FROM (
    SELECT * FROM clients
    ORDER BY name ASC
    LIMIT 10 OFFSET 0
) AS client
LEFT JOIN client_account_types AS cat ON client.id = cat.client_id
FULL JOIN account_types AS at ON cat.account_type_id = at.id;

Espero que isso ajude outras pessoas também.