PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Junte um a muitos e recupere um único resultado


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