这是SQL的新手,所以如果这根本不可能,我很抱歉。
我主要使用SQL查询从数据库中获取数据,然后将它们传递给Graphql API。到目前为止,这一直很有效,因为我的查询相当简单:
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;