PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres gibt [null] anstelle von [] für array_agg der Join-Tabelle zurück

Eine andere Option könnte array_remove(..., NULL) sein (eingeführt in 9.3 ). ) wenn tags.tag ist NOT NULL (Andernfalls möchten Sie vielleicht NULL beibehalten Werte im Array, aber in diesem Fall können Sie nicht zwischen einem einzelnen vorhandenen NULL unterscheiden -Tag und ein NULL -Tag aufgrund des 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

Wenn keine Tags gefunden werden, wird ein leeres Array zurückgegeben.