postgresql - присоединиться к свойству JSON - PullRequest
0 голосов
/ 27 июня 2018

У меня есть две таблицы user и photo

Когда я выбираю несколько photo, мы можем просто сделать это

SELECT (
photos.id as photo_id, 
photo.url as photo_url,
user.id as user_id,
user.name as user_name)
FROM photo INNER JOIN user ON photo.user_id = user.id

и это даст массив фотографий в формате json

[{
  photo_id,
  photo_url,
  user_id,
  user_name
}]

Тем не менее, я хотел бы что-то вроде этого

[{
  id,
  url,
  user:{
    id,
    name
  }
}]

Эта структура может помочь мне получить доступ к массиву с помощью переменной photos, и итерация по photos будет более интуитивной.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

При запросе ниже будет получен массив фотографий в желаемом формате json.

 with users(id,name) as (
    select 1,'user1'::text
), photo(id,user_id,url) as (
    select 100,1,'http://photo.com/user1'::text
)
select
 json_agg(
     json_build_object(
         'id',p.id,
         'url',p.url,
        'user',row_to_json(u) 
     )    
 )    
from users u
join photo p on p.user_id=u.id
0 голосов
/ 27 июня 2018

Хорошо, поэтому я немного прочитал и нашел, что это жизнеспособное решение на данный момент

select 
photo.id, photo.url,
(
    select row_to_json(u) from (
        select id, name from user where user.id = photo.user_id
    ) u
) as user
from photo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...