gpt4 book ai didi

sql - 在 Postgresql 中将记录数组转换为 JSON

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

我在使用 Postgresql 将记录数组转换为 JSON 时遇到问题。

版本:psql (PostgreSQL) 9.5.3

当前查询:

SELECT c.id, (select array(
select (cp.id,cp.position)
from contactposition cp
where cp.contact_id_id = c.id -- join on the two tables
)
) as contactpositions
from contacts c;

contacts 表中的联系人可以从 contactposition 表中分配多个职位。

结果是这样的:

| id (integer) | contactpositions (record[])                                          |
|--------------|----------------------------------------------------------------------|
| 5 | {"(21171326,\"Software Developer\")","(21171325,Contractor)" (...)"} |

但我希望它是这样的:

| id (integer) | contactpositions (record[])                                          |
|--------------|----------------------------------------------------------------------|
| 5 | [{"id": 21171326, "position": "Software Developer", "id": 21171325, "position": "Contractor", (...)] |

我知道有几个辅助函数,例如 array_to_json,但我就是无法让它工作。

我试过:

SELECT c.id, array_to_json(select array(
select (cp.id,cp.position)
from contactposition cp
where cp.contact_id_id = c.id
)
) as contactpositions
from contacts c;

但它抛出:错误:“select”处或附近的语法错误,所以显然我没有正确使用它。

如果有任何提示,我将不胜感激!

最佳答案

使用jsonb_build_object()jsonb_agg() :

select c.id, jsonb_agg(jsonb_build_object('id', cp.id, 'position', cp.position))
from contacts c
join contactposition cp on c.id = cp.contact_id
group by 1;

关于sql - 在 Postgresql 中将记录数组转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38078145/

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