Plus simple, plus court, plus rapide avec 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
Détails, explication, référence et liens dans cette réponse étroitement liée
.
J'utilise un LEFT JOIN , de sorte que les lignes de table_a sans ligne correspondante dans table_b ne sont pas supprimés.
Remarques :
Bien qu'il soit autorisé dans PostgreSQL, il n'est pas judicieux d'utiliser date comme nom de colonne. C'est un mot réservé
dans chaque standard SQL et un nom de type dans PsotgreSQL.
C'est aussi un anti-modèle pour nommer une colonne d'ID id . Pas descriptif et pas utile. Une (des nombreuses) conventions de dénomination possibles serait de la nommer d'après la table où elle est la clé primaire :table_a_id . Même nom pour les clés étrangères qui y font référence (si aucun autre nom naturel ne prévaut).