如何将sql结果作为对象获取

Posted

技术标签:

【中文标题】如何将sql结果作为对象获取【英文标题】:how to get sql result as objects 【发布时间】:2020-08-15 09:21:39 【问题描述】:

我有三张桌子:

表用户
ID
姓名
电子邮件
表校园
ID
user_id(外键)
名称
表 POST ID 标题 user_id(外键)

一个用户属于一个校园,一个帖子属于一个用户。我想写一个查询来获取帖子内部联接与用户内部联接与校园。

我得到的结果:

[ ID 用户名 校园名称 标题 ... ]

一切都在一个对象中。相反,我想要这样的嵌套对象:

[ 帖子标题: post_id: ... 用户:id 名称... 校园:id name ... ]

这样,User和Campus是根据外键在post中继承的。 如何使用原始 sql 实现它?我应该稍后解析它吗?

【问题讨论】:

我想你想要一个 json 对象。喜欢这里***.com/questions/41758870/… 【参考方案1】:

您可以使用 join 和使用 json 函数来生成您期望的结果。

您的问题关于表结构不是很准确,但应该如下所示:

select 
    json_object(
        'id',     p.id
        'title',  p.title
        'user',   json_object('id', u.id, 'name', u.name),
        'campus', json_object('id', c.id, 'name', c.name)
    ) post_object
from posts p
inner join users u on u.id = p.user_id
inner join campus c on c.user_id = u.id

这为您提供了一个结果集,其中每个帖子包含一列和一条记录作为 json 对象,其中包含代表用户和校园的嵌套对象。

如果您想要一个包含单行且所有行都填充在 json 数组中的结果,您可以在此之上使用 json_arrayagg()

select json_arrayagg(
    json_object(
        'id',     p.id
        'title',  p.title
        'user',   json_object('id', u.id, 'name', u.name),
        'campus', json_object('id', c.id, 'name', c.name)
    ) 
) all_posts_objects
from posts p
inner join users u on u.id = p.user_id
inner join campus c on c.user_id = u.id

【讨论】:

谢谢老兄,我以前不知道 sql 中的 json 对象,我认为这会起作用。再次感谢

以上是关于如何将sql结果作为对象获取的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期对象作为第一个也是唯一的输入参数传递给 PL-SQL

如何使用附加过滤的相关对象作为 Django 中的字段来获取结果?

spring 如何获取 jdbctemplate

如何在 Zend 中使用表上的子查询执行查询并获取 Rowset 对象作为结果?

如何将 spark sql 查询结果映射到对象?

如何通过 Automic 将 SQL 脚本结果作为电子邮件正文中的表格发送