postgreSQL:返回左联接作为对象



这是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;

最新更新