如何在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
相关产品推荐
相关产品推荐

