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