如何将关联查询的其他表数据封装为social_media对象返回?
实现嵌套结构结果的两种常用方法
方法一:在应用代码层处理(所有数据库通用)
先按原SQL查出平级数据,再在代码里把restaurants_social的字段单独封装成social_media对象。
举个Python代码示例:
# 假设query_results是SQL查询返回的平级数据列表 processed_data = [] for item in query_results: # 提取社交相关字段 social_fields = {} # 替换成你实际的社交字段名,比如instagram、facebook等 for field in ['instagram', 'facebook', 'twitter']: if field in item: social_fields[field] = item.pop(field) # 把封装好的对象加回去 item['social_media'] = social_fields processed_data.append(item)
方法二:在SQL层直接生成嵌套结构(依赖数据库类型)
如果你的数据库支持JSON函数,可以直接在SQL里构造嵌套对象:
PostgreSQL 写法
用json_build_object把社交字段打包成JSON对象:
select e.*, json_build_object( 'instagram', c.instagram, 'facebook', c.facebook, 'twitter', c.twitter -- 把restaurants_social表的所有字段都按这个格式添加 ) as social_media from restaurants e inner join restaurants_social c on e.id = c.id
MySQL 写法(5.7及以上版本)
用JSON_OBJECT函数实现:
select e.*, JSON_OBJECT( 'instagram', c.instagram, 'facebook', c.facebook, 'twitter', c.twitter -- 依次添加所有社交相关字段 ) as social_media from restaurants e inner join restaurants_social c on e.id = c.id
内容的提问来源于stack exchange,提问作者chichi
相关产品推荐
相关产品推荐

