数据库中某个表中的某个字段的值是用逗号隔开的多个值,根据逗号拆分并从另一个表中查出数据返回

有两个表A,B,表结构如下:

A表
B表

关联关系说明如下:

(1)A.hospital_catalog=B.id

(2)A表中hospital_catalog字段的值是以 逗号 “,” 隔开,且两边用中括号“[ ]”包起,A中hospital_catalog的值是B的id

查询要求:查询A表中的数据,其中hospital_catalog字段要求将数字id换成对应的param_value

解决办法:

select  A.id,  A.hospital_catalog as '机构类型编号',  GROUP_CONCAT(B.param_value) as '机构类型'
from A JOIN B
on FIND_IN_SET( B.id, REPLACE (REPLACE (A.hospital_catalog, '[', ''),']','')  )
GROUP BY A.id

(注:以上颜色标记仅为了方便区分阅读,无其他意义,加粗处为本次查询的重点所在)

查询效果如下:

 

查询思路解析:

①hospital_catalog字段存储时,使用中括号“[ ]”包起来的,所以第一步要去掉中括号(如果没有中括号,这一步可以省略),故而用到方法replace,此处的去中括号语句为: REPLACE ( REPLACE (A.hospital_catalog, '[', '') ,']','')  。其中紫色部分为去除中括号的左半部分“ [ ”,红色部分是在去掉左半部分括号的基础上去掉右半部分的括号“]”。 去除之后,原本是“[28,137,30]”的数据会变成“28,137,30”

②FIND_IN_SET(str,strlist),该函数用于判断 str 是否在 strlist 中,如果是,作为条件,返回对应数据,如果str不在strlist 或strlist 为空字符串,则返回值为 0 。

③group_concat(),官方:该函数返回带有来自一个组的连接的非NULL值的字符串结果。
通俗点理解:group_concat()会计算哪些行属于同一组,将属于同一组的列按照一定的拼接规则拼接好显示出来。形象的来说就是把列里的内容转化到了行里。

 

参考资料:

https://www.yiibai.com/mysql/find_in_set.html

https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc

  • 9
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值