如何将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 中的字段来获取结果?