PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Joindre un à plusieurs et récupérer un seul résultat

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