PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie wendet man Paginierung auf das Ergebnis einer SQL-Abfrage mit Joins an?

Es ist lustig, wie das Schreiben einer Frage zum Nachdenken anregt, und es hilft tatsächlich sehr dabei, sich eine Lösung für Ihr eigenes Problem vorzustellen.

Ich konnte dieses Problem lösen, indem ich einfach den Paginierungsteil der Abfrage zu einer Unterabfrage meiner Hauptabfrage anstatt zur Hauptabfrage selbst hinzufügte.

Anstatt beispielsweise Folgendes zu tun:

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;

Ich mache das:

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;

Hoffe, das hilft auch anderen Leuten.