我想知道是否可以将结果列表作为JSON对象返回。我的查询比下面的查询更复杂,但为了简单起见,表达了我的目标。
SELECT
r.name, r.address
FROM "Locations" AS r
LEFT JOIN "Units" AS f
ON r.city = f.city
每个位置有很多潜在的单位,但是那些以JSON形式返回的单位会很好,而不是修改我的全表结构。
因此,我正在寻找的响应是每个位置的一行,其中包含列:名称(字符串),地址(字符串)和单位(代表所有行的JSON)。
这在MySQL中永远不可能,想知道我是否可以在Postgres中做到这一点。 JSONd的数据并不大,所以我不太关心性能。
答案 0 :(得分:2)
你会想要这样的东西:
SELECT
json_build_object(
'name', r.name,
'address', r.address,
'units', json_agg( json_build_object(
'number', f.number,
-- etc etc fields of units here
))
)
FROM "Locations" AS r
LEFT JOIN "Units" AS f
ON r.city = f.city
GROUP BY r.id;
由于您没有提供架构,样本数据,预期输出等,因此很难完全确定。
请注意,您无法嵌套json_agg
次来电。对于存在多个级别的连接的多级结果,需要不同的方法。尝试提供更好地反映您的实际用例的内容,包括样本数据和预期结果,如果这是一个问题。
您可能需要在FROM
中使用嵌套的一系列查询重新构造,以获得嵌套级别所需的聚合。我认为条件上拉和下推仍然会阻止为要丢弃的行创建JSON,但还没有最终验证这一点。