MySQL种字符串拆分(substring_index)并作为关联查询条件后多列展示

本文欢迎转载,转载请注明出处,谢谢~(作者:喝酒不骑马 Colton_Null)
from CSDN


最近的项目中有个需求。有关用户的地址信息是存在person_info_t表中的address字段中,省市区用ID存放,中间用逗号隔开。如下表所示

_idaddresss
17,77,893

address中的数字是城市信息表(region表)中的id。如下图所示

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

现在的需求是,要把7,77,893拆开,分别用7,77,893去region表中查询对应省市区的名称并用多列形式展示。例如:

_idprovincecitydistrict
1辽宁省锦州市凌河区

查询了各种资料,果然高手在民间啊。整理了可以实现上述方法的SQL语句如下:

select pi._id ,
(select re.REGION_NAME from region re inner join person_info_t pi on re.REGION_ID = SUBSTRING_INDEX(pi.address,',',1)) as province,
(select re.REGION_NAME from region re inner join person_info_t pi on re.REGION_ID = SUBSTRING_INDEX(SUBSTRING_INDEX(pi.address,',',2),',',-1)) as city,
(select re.REGION_NAME from region re inner join person_info_t pi on re.REGION_ID = SUBSTRING_INDEX(pi.address,',',-1)) as district
from person_info_t pi where pi._id = '1'

实际效果如下
这里写图片描述
需求完美解决!

其中,SUBSTRING_INDEX(str,delim,count)函数是用来分割字符串的。
说明:SUBSTRING_INDEX(被截取字段,关键字,关键字出现的次数)
例:select SUBSTRING_INDEX("www.aimaonline.cn",".",2) as test from code_t
结果:www.aimaonline
如果关键字出现的次数是负数,如-2,则是从后倒数,到字符串结束,对应结果即为aimaonline.cn

上述SQL还有一种实现方法

select pi._id,  
(select re.REGION_NAME from region re , person_info_t pi where re.REGION_ID = SUBSTRING_INDEX(pi.address,',',1)) as province,
(select re.REGION_NAME from region re , person_info_t pi where re.REGION_ID = SUBSTRING_INDEX(SUBSTRING_INDEX(pi.address,',',2),',',-1)) as city,
(select re.REGION_NAME from region re , person_info_t pi where re.REGION_ID = SUBSTRING_INDEX(pi.address,',',-1)) as district
from person_info_t pi where pi._id = '1'
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值