Een andere optie kan zijn array_remove(..., NULL)
(geïntroduceerd in 9.3
) als tags.tag
is NOT NULL
(anders wil je misschien NULL
behouden waarden in de array, maar in dat geval kunt u geen onderscheid maken tussen een enkele bestaande NULL
tag en een NULL
tag vanwege de 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
Als er geen tags worden gevonden, wordt een lege array geretourneerd.