如何在PostgreSQL中生成单个JSON对象而非JSON数组
解决方案
直接使用PostgreSQL的jsonb_object_agg聚合函数就能实现需求,它会把关联后的所有键值对合并成单个JSONB对象:
SELECT jsonb_object_agg(Table1.key, Table2.value) FROM Table1 JOIN Table2 USING(guid);
原理说明
- 你之前用的
jsonb_build_object是行级函数,每匹配一行就生成一个独立的JSON对象,所以查询结果是多行JSON,最终会被客户端封装成JSON数组。 jsonb_object_agg是聚合函数,会遍历所有匹配的行,将每行的key和value整合到同一个JSON对象中,直接返回你需要的单个对象结构。
处理重复键的情况(可选)
如果存在多个行对应同一个key的情况,jsonb_object_agg默认会保留最后出现的那个值。如果需要指定保留规则,可以通过排序来控制:
SELECT jsonb_object_agg(Table1.key, Table2.value) WITHIN GROUP (ORDER BY guid DESC) FROM Table1 JOIN Table2 USING(guid);
上面的语句会按guid降序排列,确保最新的(或指定顺序的)值被保留。
内容的提问来源于stack exchange,提问作者smdsa1337
相关产品推荐
相关产品推荐

