PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Unisci uno a molti e recupera un singolo risultato

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).