Otra opción podría ser array_remove(..., NULL)
(introducido en 9.3
) si tags.tag
es NOT NULL
(de lo contrario, es posible que desee mantener NULL
valores en la matriz, pero en ese caso, no puede distinguir entre un único NULL
existente etiqueta y un NULL
etiqueta debido a 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 no se encuentran etiquetas, se devuelve una matriz vacía.