sql >> Base de Datos >  >> RDS >> PostgreSQL

Únase a uno a muchos y recupere un solo resultado

Más simple, más corto, más rápido con DISTINCT ON de 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

Detalles, explicación, referencia y enlaces en esta respuesta estrechamente relacionada .
Uso un LEFT JOIN , de modo que las filas de table_a sin ninguna fila coincidente en table_b no se eliminan.

Notas al margen:

Si bien está permitido en PostgreSQL, no es aconsejable usar date como nombre de columna. Es una palabra reservada en cada estándar SQL y un nombre de tipo en PsotgreSQL.

También es un antipatrón para nombrar una columna de ID id . No descriptivo y no útil. Una (de muchas) posibles convenciones de nomenclatura sería nombrarla después de la tabla donde es la clave principal:table_a_id . Mismo nombre para las claves foráneas que lo referencian (si ningún otro nombre natural tiene prioridad).