Mysql 逗号分隔id,查询出逗号分割的name,find_in_set的使用

举个例子:

查询 部门关系表,一个节点id对应着多个部门id
在这里插入图片描述
部门表:一个id一个名称
在这里插入图片描述
需求就是要查询一个节点id对应的多个部门名称。

查询语句如下:
在这里插入图片描述
拆开解释下:

其中主要就是需要注意on后面的连接条件

连表条件用的是 find_in_set(str,strList)>0
find_in_set(str,strList)返回的是str在strList中第一次出现的位置,从1开始,如果返回值大于0,就说明strList中包括了str,也就是上面例子中:departmentId存在在departments这个字段中,把这个作为连表条件,关联表的departments和部门表的id进行关联。

了解下find_in_set(str,strList)的用法:
在这里插入图片描述
所以上面用find_in_set(str,strList)的返回值大于0来判断str是否在strList中,用这样的判断来建立连接关系。

再来看select后面的 group_concat(str) 搭配group by使用,是为了name查出来的格式(‘杭州分行,同城支行’)对应着departments的格式(‘002,003’)
在用下图来理解下:group_concat(name)用来合并name(类似列转行),group by 用来按照节点id分组

在这里插入图片描述

group_concat(str)如下图,就是有点类似列转行的功能,默认是用逗号分隔
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值