当前位置:Gxlcms > 数据库问题 > mysql行转列(拆分字符串场景)

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

时间:2021-07-01 10:21:17 帮助过:19人阅读

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

技术分享

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

技术分享

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

技术分享

实现sql:

  1. SELECT
  2. NAME,
  3. REPLACE(
  4. SUBSTRING_INDEX(mobile, ',', a.id),
  5. CONCAT(
  6. SUBSTRING_INDEX(mobile, ',', a.id - 1),
  7. ','
  8. ),
  9. ''
  10. )AS mobile
  11. FROM
  12. squence a
  13. CROSS JOIN(
  14. SELECT
  15. NAME,
  16. CONCAT(mobile, ',')AS mobile,
  17. LENGTH(mobile)- LENGTH(REPLACE(mobile, ',', ''))+ 1 AS size
  18. FROM
  19. `user`
  20. )b ON a.id <= b.size


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:mysql   行转列   

人气教程排行