小陆同学

python 中文名:蟒蛇,设计者:Guido van Rossum

导航

mysql--一个字段的多个值连表查询

众所周知,MySQL是关系型数据库,我们在处理关系的方式可以通过外键,也可以通过用一个字段去存储另一张表的唯一值,下面说一下我当前的场景

table1:user表

table2:team表

id team_name team_owner team_leaders
自增主键 团队1 zhangsan lisi,wangwu

其中,team表是这样的结构,首先从业务方面:team_owner最多1个人,而team_leaders字段是不确定的,有可能无leader,有可能1个,有可能多个,那么也可以看得出来,对于这个角色我用的是字符串类型,这个时候,我想要让这张表与user表通过join查询匹配对应的人名字,怎么让team_leaders字段的姓名匹配出来呢??

select t.id,group_concat(u.name) from team as t inner join user as u on find_in_set(u.username,t.team_leaders)>0 group by t.id
id group_concat(u.name)
1 李四,王五

但是,这里遇到的一个问题是:find_in_set是获取到位置,按获取到的位置排序,再group concat,就是如果在user表里,wangwu的id是1,lisi的id是2,,那么查出来的结果就是这样的:它会以user表的索引去排序,有可能会颠倒我team表里这个字段的顺序

id  group_concat(u.name)
 1  王五,李四

 这里需要再去排序以下

select t.id,group_concat(u.name order by find_in_set(u.username,t.team_leaders)) from team as t inner join user as u on find_in_set(u.username,t.team_leaders)>0 group by t.id

 

posted on 2022-04-20 19:22  小陆同学  阅读(1626)  评论(0编辑  收藏  举报