gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:06:45 25 4
gpt4 key购买 nike

我正在 Postgres 中选择一些对象及其标签。架构相当简单,三个表:

对象 id

标签 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 ]

而不是一个空数组。 没有标签时如何返回空数组?我已经仔细检查过我没有返回空标签。

aggregate docs说“合并函数可用于在必要时用零或空数组替换 null”。我试过 COALESCE(ARRAY_AGG(tags.tag)) 作为标签 但它仍然返回一个空数组。我已经尝试将第二个参数设置为许多东西(例如 COALESCE(ARRAY_AGG(tags.tag), ARRAY()),但它们都会导致语法错误。

最佳答案

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

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

关于postgresql - Postgres 为连接表的 array_agg 返回 [null] 而不是 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31108946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com