SELECT 1 ID и все принадлежащие элементы - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь создать json запрос выбора, который может вернуть мне результат следующим способом. 1 строка содержит 1 main_message_id и принадлежащие ему сообщения. (Как и нижнее изображение.) Формат json не является обязательным, если он будет работать с другими методами, он будет в порядке.

Я сохраняю данные следующим образом:

+-----------------+---------+----------------+
| main_message_id | message | sub_message_id |
+-----------------+---------+----------------+
|               1 | test 1  |              1 |
|               1 | test 2  |              2 |
|               1 | test 3  |              3 |
|               2 | test 4  |              4 |
|               2 | test 5  |              5 |
|               3 | test 6  |              6 |
+-----------------+---------+----------------+

Я хотел бы создать запрос, который вернет мне данные следующим образом:

+-----------------+-----------------------+--+
| main_message_id |        message        |  |
+-----------------+-----------------------+--+
|               1 | {test1}{test2}{test3} |  |
|               2 | {test4}{test5}{test6} |  |
|               3 | {test7}{test8}{test9} |  |
+-----------------+-----------------------+--+

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете использовать json_agg () для этого:

select main_message_id, json_agg(message) as messages
from the_table
group by main_message_id;

Обратите внимание, что {test1}{test2}{test3} недействительно JSON, приведенное выше вернет действительный массив JSON, например ["test1", "test2", "test3"]

Если вы хотите получить список через запятую, используйте string_agg ();

select main_message_id, string_ag(message, ', ') as messages
from the_table
group by main_message_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...