开发者社区> 问答> 正文

GROUP_CONCAT有限制?mysql

我有表player-s在许多一对多的关系与skill-s

目标是通过单个查询列出球员及其“前三项技能”。

小提琴

create table player( id int primary key );

create table skill( id int primary key, title varchar(100) );

create table player_skills ( id int primary key, player_id int, skill_id int, value int ); 查询:

SELECT p.id,
group_concat(s.title SEPARATOR ', ') as skills

FROM player p LEFT JOIN player_skills ps ON ps.player_id = p.id LEFT JOIN skill s ON s.id = ps.skill_id

WHERE ps.value > 2 -- skills limit 3 some how ... group by p.id order by s.id

-- expected result -- player_ID, skills -- 1 , 'one' -- 2 , 'one' -- 3 , 'two, three, four' 正如您在小提琴中看到的那样,查询结果仅缺少3个技能的限制。 我尝试了子查询的几种变体..联接等等,但是没有任何效果。

展开
收起
保持可爱mmm 2020-05-17 19:24:49 576 0
1 条回答
写回答
取消 提交回答
  • 一种比较古怪的方法是对结果进行后处理GROUP_CONCAT:

    substring_index(group_concat(s.title SEPARATOR ','), ',', 3) as skills 当然,这是假设您的技能名称不包含逗号,并且数量很少。

    小提琴

    一个功能请求用于GROUP_CONCAT支持一个明确的LIMIT条款是可惜还是没有得到解决。

    更新:正如用户Strawberry指出的那样,该表player_skills应具有元组(player_id, skill_id)作为其主键,否则该架构允许多次将同一技能分配给玩家,在这种情况下group_concat将无法正常工作。来源:stack overflow

    2020-05-17 19:25:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像