Enklare, kortare, snabbare 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, förklaring, benchmark och länkar i det här närbesläktade svaret
.
Jag använder en LEFT JOIN
, så att rader från table_a
utan någon matchande rad i table_b
släpps inte.
Sidanteckningar:
Även om det är tillåtet i PostgreSQL är det oklokt att använda date
som kolumnnamn. Det är ett reserverat ord
i varje SQL-standard och ett typnamn i PsotgreSQL.
Det är också ett antimönster att namnge en ID-kolumn id
. Inte beskrivande och inte till hjälp. En (av många) möjliga namnkonvention skulle vara att namnge den efter tabellen där den är primärnyckel:table_a_id
. Samma namn för främmande nycklar som refererar till det (om inget annat naturligt namn har företräde).