застрял с добавлением имени к подэлементам в JSON - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть 3 таблицы со следующей схемой.

a.c1 int (pk),
a.c2 varchar(50),
a.c3 varchar(50),

b.c1 int(pk),
b.c2 int(fk) -> a.c1,
b.c3 varchar(50),
b.c4 varchar(50),

c.c1 int(pk),
c.c2 int(fk) -> b.c1,
c.c3 int(fk) -> a.c1,
c.c4 varchar(50),
c.c5 varchar(50)

Я ожидаю, что результат будет

{
    "json_doc": {
        "a.c1": "val",
        "a.c2": "val",
        "a.c3": "val",
        "b": [{
            "b_c1_value": {
                "b.c1": "val",
                "b.c2": "val",
                "b.c3": "val",
                "b.c4": "val",
                "c": [{
                    "c_c1_value": {
                        "c.c1": "val",
                        "c.c2": "val",
                        "c.c3": "val",
                        "c.c4": "val",
                        "c.c5": "val"
                    }
                }]
            }
        }]
    }
}

Может кто-нибудь, пожалуйста, помогите мне с правильным sql. Я очень новичок в Postgres.

Я получил это далеко:

select row_to_json(t)
        from (
                     select
                         *,
                         (
                             select array_to_json(array_agg(row_to_json(d)))
                             from (
                                            select
                                                *,
                                                (
                                                    select array_to_json(array_agg(row_to_json(dc)))
                                                    from (
                                                                 select  *
                                                                 from c
                                                                 where c.c2 = b.c1
                                                             ) dc
                                                ) as c

                                            from b
                                            where c2 = a.c1
                                        ) d
                         ) as b
                     from a
                        WHERE a.deployid = 19
                 ) t;

Мне нужны ключевые имена для заполнения массивов. Я застрял с этим. Любая помощь очень ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...