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

时间:2019-01-30 20:43:44

标签: postgresql

我正在通过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映射为行的数组而不是一个行。

1 个答案:

答案 0 :(得分:0)

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;