Mais simples, mais curto e mais rápido com o
DISTINCT ON do 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
Detalhes, explicação, referência e links esta resposta intimamente relacionada .
Eu uso um
LEFT JOIN , para que as linhas de table_a sem nenhuma linha correspondente em table_b não são descartados. Notas laterais:
Embora seja permitido no PostgreSQL, não é aconselhável usar
date como nome da coluna. É uma palavra reservada
em cada padrão SQL e um nome de tipo em PsotgreSQL. Também é um antipadrão nomear uma coluna de ID
id . Não descritivo e não útil. Uma (de muitas) convenções de nomenclatura possíveis seria nomeá-lo após a tabela onde é a chave primária:table_a_id . Mesmo nome para chaves estrangeiras que fazem referência a ele (se nenhum outro nome natural tiver precedência).