我在 Postgres 选择了一些对象和它们的标签,这个模式相当简单,有三个表:
物件 id
标签 强 > id | object_id | tag_id
标签 id | tag
我像这样连接这些表,使用 array_agg
将标记聚合到一个字段中:
SELECT objects.*,
array_agg(tags.tag) AS tags,
FROM objects
LEFT JOIN taggings ON objects.id = taggings.object_id
LEFT JOIN tags ON tags.id = taggings.tag_id
但是,如果对象没有标记,Postgres 返回:
[ null ]
而不是一个空数组。 当没有标记时,我如何返回一个空数组?我已经双重检查,我没有一个空标记被返回。
聚合文件说“聚合函数可以在必要时用0或空数组替换 null”。我试过 COALESCE(ARRAY_AGG(tags.tag)) as tags
,但它仍然返回一个带有 null 的数组。我已经尝试过使用第二个参数做很多事情(比如 COALESCE(ARRAY_AGG(tags.tag), ARRAY())
,但是它们都会导致语法错误。