Вы можете использовать функции join и json для получения ожидаемого результата.
Ваш вопрос не очень точен в отношении структур таблиц, но он должен выглядеть следующим образом:
select
json_object(
'id', p.id
'title', p.title
'user', json_object('id', u.id, 'name', u.name),
'campus', json_object('id', c.id, 'name', c.name)
) post_object
from posts p
inner join users u on u.id = p.user_id
inner join campus c on c.user_id = u.id
Это дает вам набор результатов с одним столбцом и одной записью на пост в виде объекта json, который содержит вложенные объекты, представляющие пользователя и кампус.
Если вы хотите получить результат с одной строкой и все строки, помещенные в массив json, вы можете использовать json_arrayagg()
поверх этого:
select json_arrayagg(
json_object(
'id', p.id
'title', p.title
'user', json_object('id', u.id, 'name', u.name),
'campus', json_object('id', c.id, 'name', c.name)
)
) all_posts_objects
from posts p
inner join users u on u.id = p.user_id
inner join campus c on c.user_id = u.id