Eenvoudiger, korter, sneller met PostgreSQL's DISTINCT ON :
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
Details, uitleg, benchmark en links in dit nauw verwante antwoord
.
Ik gebruik een LEFT JOIN , zodat rijen van table_a zonder enige overeenkomende rij in table_b worden niet verwijderd.
Kanttekeningen:
Hoewel het is toegestaan in PostgreSQL, is het onverstandig om date te gebruiken als kolomnaam. Het is een gereserveerd woord
in elke SQL-standaard en een typenaam in PsotgreSQL.
Het is ook een anti-patroon om een ID-kolom een naam te geven id . Niet beschrijvend en niet nuttig. Een (van de vele) mogelijke naamgevingsconventies zou zijn om het te noemen naar de tabel waar het de primaire sleutel is:table_a_id . Dezelfde naam voor externe sleutels die ernaar verwijzen (als geen andere natuurlijke naam voorrang heeft).