Довольно новичок в 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, если это имеет значение.
Я не уверен, что ваш вопрос касается структур 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;