2013-04-09 13 views
5

ho un'istruzione SQLcorretta impaginazione in un join select

select * 
from users u left join files f 
on u.id = f.user_id 
where f.mime_type = 'jpg' 
order by u.join_date desc 
limit 10 offset 10 

Il rapporto è 1-N: utente può avere molti file.

Seleziona in modo efficace la seconda pagina di 10 elementi.

Il problema è che questa query limita/compensa una tabella unita, ma voglio limitare/compensare le righe distinte dalla prima tabella (users).

Come? Obiettivo PostgreSQL e HSQLDB

risposta

8

È necessario limitare prima la selezione sul tavolo esterno e quindi unire la tabella dipendente al risultato.

select * from (select * from users limit 10 offset 10) as u 
left join files f 
    on u.id = f.user_id 
+0

è possibile "ordinare per" nella sottoselezione e aggiungere la clausola 'where' nella tabella' files'? – Queequeg

+0

Sì, ma l'ordine per la selezione secondaria ha una semantica diversa a seconda di come lo si fa (all'interno o all'esterno della sottoselezione). Ma puoi fare anche entrambi insieme. –

+0

Penso che questo selezionerà solo gli utenti con file con f.mime_type = 'jpg' per i primi dieci utenti. Significa che non avrai 10 risultati, ma N risultante con N lpratlong