Một tùy chọn khác có thể là array_remove(..., NULL)
( được giới thiệu trong 9.3
) if tags.tag
là NOT NULL
(nếu không, bạn có thể muốn giữ NULL
các giá trị trong mảng, nhưng trong trường hợp đó, bạn không thể phân biệt giữa một NULL
hiện có duy nhất và một thẻ NULL
do thẻ 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
Nếu không tìm thấy thẻ nào, một mảng trống sẽ được trả về.