查询行并将许多行连接为JSON数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询行并将许多行连接为JSON数组相关的知识,希望对你有一定的参考价值。

我希望通过id加入三个表,结果是三个json列,每个列的内容。

我面临的问题是,每个cat_request有很多cat_request_fields,我目前正在将cat_request_fields作为一个对象,而不是一个对象数组。

这个查询得到了cat_requestscat_request_fields的结果集。

SELECT
    row_to_json("cat_requests") AS cat_request,
    array_agg(row_to_json("cat_request_fields")) AS cat_request_fields
FROM
    "cat_requests"
    LEFT OUTER JOIN "cat_request_fields" ON "cat_requests"."id" = "cat_request_fields"."cat_request_id"
GROUP BY
    "cat_requests"."id"
LIMIT 10;

这个查询得到了catscat_requests的结果集。

SELECT
    row_to_json("cat_requests") as cat_request,
    row_to_json("cats") as cat
FROM
    "cat_requests",
    "cats"
WHERE
    "cat_requests"."cat_id" = "cats"."id"
LIMIT 1;

我正在寻找一个可以给我两者组合的查询......

如何修改此查询以将cat_request_fields映射为行数组而不仅仅是一行。

答案
SELECT
    row_to_json("cat_requests") AS cat_request,
    (select row_to_json("cats".*) as cats from "cats" where "cats"."id" = "cat_requests"."cat_id"),
    array_agg(row_to_json("cat_request_fields")) AS cat_request_fields
FROM
    "cat_requests"
    INNER JOIN "cat_request_fields" ON "cat_requests"."id" = "cat_request_fields"."cat_request_id"
GROUP BY
    "cat_requests"."id"
LIMIT 6;

以上是关于查询行并将许多行连接为JSON数组的主要内容,如果未能解决你的问题,请参考以下文章

如何创建片段以重复变量编号中的代码行

Bigquery 为其余数据输出带有 json 数组对象的不同 zip 行

回显所有 json_encoded 行

ccf 201709-3 JSON查询

修改行数组时,Swift 2数据不会重新加载数据

使用存储过程中的合并将表 A 中的许多行更新为表 B 中的几行