Un'altra opzione potrebbe essere array_remove(..., NULL)
(introdotto in 9.3
) se tags.tag
è NOT NULL
(altrimenti potresti voler mantenere NULL
valori nell'array, ma in tal caso non è possibile distinguere tra un singolo NULL
esistente tag e un NULL
tag a causa del 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
Se non vengono trovati tag, viene restituito un array vuoto.