我不知道这有多大可能,因为我没有接受过太多正式的PostgreSQL培训。我可以做大多数事情,然后用谷歌搜索剩下的。但是我不知道如何表达我想做的事情,所以我还没有找到任何东西。我可能只是用Javascript来做多个查询,并以这种方式连接它们,但我觉得有一个更好的方法。
目前在我对数据库的查询中,我有一些表的外键指向其他表中的行的id。一个简单的1对1关系,所以我目前一直在用一个简单的左连接进行测试。
但这要求我将右侧行的列添加为左侧的别名列。
例如,当我的数据返回到NodeJs应用时,它可能看起来像这样:
[{id:1,名称:'blah',其他表标识:2、其他_表_名:'blah blah',其他_表_日期:'2022年12月12日'}]
我希望它看起来更像:
[{'id':1,名称:'blah'、'其他数据表识别码':2、'其他_表':{“id”:2,名称:“blah blah”,日期:“2022年12月12日”}}]
这是否可以通过查询语句来实现?如果可以,我将如何实现它?
P.S.不确定它是否相关,但我正在使用库节点postgres进行查询。
如前所述,我目前只知道如何让我的数据回到格式:
[{id:1,名称:'blah',其他表标识:2、其他_表_名:'blah blah',其他_表_日期:'2022年12月12日'}]
我正在使用以下格式进行查询:
SELECT table1.id,table1.name,表1.其他表标识,table2.name AS其他表名称... FROM表1左联接表2 ON(表1.其他表标识= table2.id)ORDER BY table1.name
我希望它的格式为:
[{'id':1,名称:'blah'、'其他数据表识别码':2、'其他_表':{“id”:2,名称:“blah blah”,日期:“2022年12月12日”}}]
在基本情况下,格式将简化为如下格式?(这不是法律的的SQL):
SELECT表1.*,表2 AS表1.表2 FROM表1左联接表2 ON(表1.其他表标识= table2.id)ORDER BY table1.name
只是不知道怎么做。
1条答案
按热度按时间hs1ihplo1#
我更喜欢在应用程序内部进行数据转换,而不是在SQL/数据库中进行,因为如果你想的话,将来更改数据库会更容易。
但是,为了帮助你解决这个特定的问题,使用PostgreSQL的json_build_object和json_build_array函数来执行下面的查询语句。你可以使用这两个函数来生成你想要的JSON输出:
这将生成如下所示的输出:
如果要以数组的形式获取输出,请使用以下语句更改查询:
我在postgresql文档中获得了以下信息:
https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE
https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-JSON-BUILDING-ARRAYS-TABLE
显然,这是一种折衷,但请记住,现在您的应用程序与数据库紧密耦合。