@dfhkjhg

Как объединить 2 запроса?

Есть схема
users:
id | name
inventory:
id | user_id

У меня есть id пользователя и я хочу вернуть такой результат

{
 id: 1
 name: asd
 items: [] и тут должны быть его предметы
}


Я это делаю через 2 запроса :

select * from users where id = 1;
select * from inventory where user_id = 1;


Если делать через инер джоин то дуюлируются данные пользователя.
Можно ли это нормально сделать одним запросом или все равно придется обработать полученные данные?
  • Вопрос задан
  • 241 просмотр
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Вы можете напрямую получить объект JSON из БД, используя следующий запрос:
select json_build_object(
	'id', users.id,
    'name', users.name,
	'items', jsonb_agg(inventory.name) 
) json_result
from users
left join inventory on inventory.user_id = users.id
where users.id = 1
group by users.id, users.name
;


Здесь вы можете запустить SQL запрос

+============================================================================+
| json_result                                                                |
+============================================================================+
| {"id" : 1, "name" : "User 1", "items" : ["Stuff 1", "Stuff 2", "Stuff 3"]} |
+----------------------------------------------------------------------------+
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
select * from users u left join inventory i on (u.user_id=i.user_id) where u.user_id = 1;
Ответ написан
idShura
@idShura
select * 
  from users u 
       left join inventory i on i.user_id = u.id
 where u.id = 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы