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