You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中连接person、review、team三张表生成指定格式结果?

实现三张表关联并生成指定格式输出

可以实现,你需要分别聚合review和team的数据后再关联,避免直接关联三张表产生笛卡尔积导致重复内容。以下是满足需求的SQL语句:

SELECT 
    CONCAT(r.reviews, ',', t.teams) AS result
FROM person p
JOIN (
    -- 聚合review数据,按指定顺序拼接review_body
    SELECT 
        person_id, 
        GROUP_CONCAT(review_body ORDER BY review_type DESC SEPARATOR ',') AS reviews
    FROM review
    GROUP BY person_id
) r ON r.person_id = p.id
JOIN (
    -- 聚合team数据,拼接成team_name-value格式并用|分隔
    SELECT 
        person_id, 
        GROUP_CONCAT(CONCAT(team_name, '-', value) SEPARATOR '|') AS teams
    FROM team
    GROUP BY person_id
) t ON t.person_id = p.id;

语句说明:

  • 子查询r:针对review表按person_id分组,使用GROUP_CONCAT将review_body按review_type降序排序(确保Skills类型的评价排在Personality之前),并用逗号分隔。
  • 子查询t:针对team表按person_id分组,先通过CONCAT将team_name和value拼接为名称-数值格式,再用GROUP_CONCAT以|作为分隔符组合所有结果。
  • 主查询:将person表与两个聚合后的子查询关联,最后用CONCAT把两部分结果用逗号拼接,得到你需要的输出格式。

执行该语句后,输出结果为:
He has multiple skills!,He has a great personality!,Man Utd-500|Real Madrid-1500|Ajax-1000

(注:你期望的结果中第二个评价少了感叹号,这是数据录入时的差异,若需调整可直接修改review表中的对应数据)

内容的提问来源于stack exchange,提问作者michaelmcgurk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:35:21