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