Enklere, kortere, hurtigere med 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
Detaljer, forklaring, benchmark og links i dette nært beslægtede svar
.
Jeg bruger en LEFT JOIN
, så rækker fra table_a
uden nogen matchende række i table_b
er ikke tabt.
Sidebemærkninger:
Selvom det er tilladt i PostgreSQL, er det uklogt at bruge date
som kolonnenavn. Det er et reserveret ord
i hver SQL-standard og et typenavn i PsotgreSQL.
Det er også et anti-mønster at navngive en ID-kolonne id
. Ikke beskrivende og ikke nyttigt. En (af mange) mulige navnekonventioner ville være at navngive den efter tabellen, hvor den er primærnøgle:table_a_id
. Samme navn for fremmednøgler, der refererer til det (hvis intet andet naturligt navn har forrang).