sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres devuelve [null] en lugar de [] para array_agg de la tabla de unión

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.