我正在Postgres中选择一些对象及其标签.架构非常简单,有三个表:
对象 id
引用的Tagging 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
Run Code Online (Sandbox Code Playgroud)
但是,如果对象没有标签,Postgres会返回:
[ null ]
Run Code Online (Sandbox Code Playgroud)
而不是一个空数组.如果没有标签,如何返回空数组?我已经仔细检查过我没有返回null标签.
所述骨料文档说"聚结功能可用于在必要时代替零或空数组空".我试过COALESCE(ARRAY_AGG(tags.tag)) as tags但它仍然返回一个null数组.我试过让第二个参数很多东西(例如COALESCE(ARRAY_AGG(tags.tag), ARRAY()),但它们都会导致语法错误.