Как получить правильно данные?
Подскажите пожалуйста, есть вот такой запрос:
with comments_info as (
select pc.post_id, jsonb_agg(to_jsonb("pc") - 'post_id') as comments
from post_comments pc
join "user" u on u.user_id = pc.user_id
group by post_id
) select c.comments from post p
left join comments_info c on c.post_id = p.id WHERE p.id = 1
получаю вот такой результат: [{id: 1, user_id: 1, description: "description"}] а нужно получить
[{id: 1, user_id: 1, description: "description", username: "username", user_logo: "logo"}]
то есть заджойнить так чтобы получить еще и username и user_logo, как это можно сделать? Модель user:
user_id PK
email varchar
password varchar
username varchar
user_logo varchar
Модель post_comments:
id PK
post_id references post(id)
user_id references user(id)
description text
Ответы (1 шт):
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
Вам нужны две вещи:
- Функция создания
jsonbиз значений полей - jsonb_build_object - Функция слияния двух
jsonb-||
Вот демо
В результате:
with comments_info as (
select pc.post_id,
jsonb_agg((to_jsonb("pc") - 'post_id') || jsonb_build_object('username', u.username, 'user_logo', u.user_logo))
as comments
from post_comments pc
join "user" u on u.user_id = pc.user_id
group by post_id
) select c.comments from post p
left join comments_info c on c.post_id = p.id WHERE p.id = 1