Più semplice, più breve, più veloce con DISTINCT ON
di PostgreSQL :
SELECT DISTINCT ON (a.id)
a.id, a.name, a.date, b.code1, b.code2
FROM table_a a
LEFT JOIN table_b b USING (id)
ORDER BY a.id, b.sort
Dettagli, spiegazioni, benchmark e link in questa risposta strettamente correlata
.
Utilizzo un LEFT JOIN
, in modo che le righe da table_a
senza alcuna riga corrispondente in table_b
non vengono eliminati.
Note a margine:
Sebbene sia consentito in PostgreSQL, non è saggio usare date
come nome della colonna. È una parola riservata
in ogni standard SQL e un nome di tipo in PsotgreSQL.
È anche un anti-pattern per denominare una colonna ID id
. Non descrittivo e non utile. Una (delle tante) possibili convenzioni di denominazione sarebbe quella di denominarla dopo la tabella in cui è la chiave primaria:table_a_id
. Stesso nome per le chiavi esterne che vi fanno riferimento (se nessun altro nome naturale ha la precedenza).