代码之家  ›  专栏  ›  技术社区  ›  ThomasReggi

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

  •  0
  • ThomasReggi  · 技术社区  · 6 年前

    我希望通过ID连接三个表,结果是三个json列,每个列都有内容。

    我面临的问题是 cat_request 有很多 cat_request_fields ,我现在 cat_请求_字段 作为一个对象,而不是一个对象数组。

    这个查询会给我一个结果集 cat_requests cat_请求_字段 .

    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;
    

    这个查询会给我一个结果集 cats cat_请求 .

    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_请求_字段 是一组行,而不仅仅是一行。

    1 回复  |  直到 6 年前
        1
  •  0
  •   ThomasReggi    6 年前
    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;