sql操作javascript对象格式

yrefmtwq  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(310)

我正在尝试接收某个球队下的所有球员以及球队的id。
我的问题是:

SELECT player.team_id, team.name, player.first_name, player.last_name FROM player, team WHERE player.team_id = team.id AND player.league = "League 1";

我将获取结果(存储在团队中)并通过以下操作将其发送给我的客户:

res.send({
        success: true,
        teams: teams
      });

当我到达它的端点时,它会返回以下内容:

我想重新格式化这个日期,使每个独特的团队都有一个字段。它应该有一个球员字段(数组)内,所以我可以访问每个球员的球队的一部分的名字。有人知道我如何将这些数据转换成那种格式吗?
例如,对于这个数据集,在teams对象中,只有一个名为“warriors”的字段,其players数组中包含所有这些人的名字。
我试着跟随答案,但现在它只是返回一个字符串,而不是一个实际的对象。

a64a0gku

a64a0gku1#

您可以使用agggation和json函数:

select
    t.team_id,
    t.name,
    json_array_agg(
        json_object('first_name', p.first_name, 'last_name', p.last_name)
    ) as players
from teams t
inner join players p on p.team_id = t.team_id
group by t.team_id, t.name

resultset中的第三列是一个json数组,其中包含表示播放器的json对象,并带有键 first_name 以及 last_name .
您还可以将整个resultset聚合为一个json数组,并使用另一个聚合级别:

select json_array_agg(
    json_object('team_id', team_id, 'name', name, 'players', players) 
) res
from (
    select
        t.team_id,
        t.name,
        json_array_agg(
            json_object('first_name', p.first_name, 'last_name', p.last_name)
        ) as players
    from teams t
    inner join players p on p.team_id = t.team_id
    group by t.team_id, t.name
) t

编辑: json_array_agg() 仅从10.5.0版开始提供。在早期版本中,另一种方法是字符串串联:

select
    t.team_id,
    t.name,
    concat(
        '[',
        group_concat(json_object('first_name', p.first_name, 'last_name', p.last_name)),
        ']'
    ) as players
from teams t
inner join players p on p.team_id = t.team_id
group by t.team_id, t.name

相关问题