mysql拆分字符串后行转列_mysql行转列(拆分字符串场景)

一对多没有建立中间表的时候经常会采用分隔符的形式将“多”存储在“一”的一个字段里,这样做的代价是无法向一对多的时候那样直接关联查询,一般采用在程序中分割后分别查询的办法。如下图:

0818b9ca8b590ca3270a3433284dd417.png

如何才能直接用sql语句查询出下图的效果呢?

0818b9ca8b590ca3270a3433284dd417.png

可以借助一个序号表,该表中除了连续的id没有其它字段,id的值范围取决于"一"中存储的信息拆分后的数量。

0818b9ca8b590ca3270a3433284dd417.png

实现sql:

SELECT

NAME,

REPLACE(

SUBSTRING_INDEX(mobile, ',', a.id),

CONCAT(

SUBSTRING_INDEX(mobile, ',', a.id - 1),

','

),

''

)AS mobile

FROM

squence a

CROSS JOIN(

SELECT

NAME,

CONCAT(mobile, ',')AS mobile,

LENGTH(mobile)- LENGTH(REPLACE(mobile, ',', ''))+ 1 AS size

FROM

`user`

)b ON a.id <= b.size

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值