SQL: вернуть левое соединение как объект

Довольно новичок в SQL, поэтому мне очень жаль, если это вообще невозможно.

По сути, я использую SQL-запросы для получения данных из моей базы данных, а затем передаю их API Graphql. До сих пор это отлично работало, поскольку мои запросы были довольно простыми:

SELECT * from a_single_table

Теперь я дошел до того, что с помощью этих простых запросов я хотел бы получить JOIN другие данные из другой таблицы, например, пользователя, связанного с конкретным ресурсом:

 id | username  
----+------------
  1 | User1
  2 | User2
  3 | User3

Я могу легко присоединиться к ним, выполнив что-то вроде (предупреждение о псевдозапросе):

SELECT *, u.username, u.id FROM a_single_table AS s LEFT JOIN users_table AS u ON (s.authorId = u.id)

К сожалению, если я сделаю это, структура данных, которые я получу, будет представлять собой плоскую таблицу, поэтому она будет выглядеть примерно так:

{
  id: 1,
  title: "The title of the resource selected",
  username: "User1"
  userId: 1
}

Для синтаксиса Graphql было бы намного лучше, если бы он возвращался так:

{
  id: 1,
  title: "The title of the resource selected",
  user: {
    userId: 1,
    username: "User1"
  }
}

Это вообще возможно? В настоящее время использую Postgresql, если это имеет значение.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
671
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не уверен, что ваш вопрос касается структур Postgres или форматирования JSON. Но Postgres поддерживает структуры, эквивалентные строке в таблице. Итак, вы можете сделать:

SELECT s.*, u
FROM a_single_table s LEFT JOIN
     users_table u
     ON s.authorId = u.id;

Также можно создать объект JSON для каждой строки:

SELECT json_buil_object('id', s.id, 'title', s.title, 'user', u)
FROM a_single_table s LEFT JOIN
     users_table u
     ON s.authorId = u.id;

вам нужно что-то вроде этого

SELECT firsttable.*, to_json("secondtable") AS keyyouwant
FROM a_single_table s LEFT JOIN
     users_table u
     ON s.authorId = u.id;

Другие вопросы по теме