加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – Postgres为连接表的array_agg返回[null]而不是[]

发布时间:2020-12-13 16:28:50 所属栏目:百科 来源:网络整理
导读:我在Postgres中选择一些对象及其标签.该模式相当简单,三个表格: 对象id taggings id | object_id | TAG_ID 标签ID |标签 我正在加入这样的表,使用array_agg将标签聚合到一个字段中: SELECT objects.*,array_agg(tags.tag) AS tags,FROM objectsLEFT JOIN t
我在Postgres中选择一些对象及其标签.该模式相当简单,三个表格:

对象id

taggings id | object_id | TAG_ID

标签ID |标签

我正在加入这样的表,使用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 ]

而不是一个空的数组.当没有标签时,如何返回一个空数组?我已经检查过,我没有返回null标签.

aggregate docs说“必要时可以使用coalesce函数将零或空数组替换为空”.我尝试了COALESCE(ARRAY_AGG(tags.tag))作为标签,但它仍然返回一个数组为空.我已经尝试使第二个参数众多的东西(如COALESCE(ARRAY_AGG(tags.tag),ARRAY()),但它们都导致语法错误.

另一个选项可能是array_remove(…,NULL)( introduced in 9.3)如果tags.tag不为空(否则您可能希望在数组中保留NULL值,但在这种情况下,您无法区分单个现有NULL标签和由于LEFT JOIN引起的NULL标签):
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

如果没有找到标签,则返回一个空数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读