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

Postgres renvoie [null] au lieu de [] pour array_agg de la table de jointure

Une autre option pourrait être array_remove(..., NULL) (introduit dans 9.3 ) si tags.tag est NOT NULL (sinon vous voudrez peut-être garder NULL valeurs dans le tableau, mais dans ce cas, vous ne pouvez pas faire la distinction entre un seul NULL existant balise et un NULL balise due à la LEFT JOIN ):

SELECT objects.*,
     array_remove(array_agg(tags.tag), NULL) AS tags,
FROM objects
LEFT JOIN taggings ON objects.id = taggings.object_id
LEFT JOIN tags ON tags.id = taggings.tag_id

Si aucune balise n'est trouvée, un tableau vide est renvoyé.