相关疑难解决方法(0)

对于连接表的array_agg,Postgres返回[null]而不是[]

我正在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()),但它们都会导致语法错误.

postgresql left-join database-normalization

38
推荐指数
3
解决办法
1万
查看次数