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