PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres restituisce [null] invece di [] per array_agg della tabella di join

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.