服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL中列如何以逗号分隔转成多行

MySQL中列如何以逗号分隔转成多行

2023-02-09 12:06搬运Gong Mysql

这篇文章主要介绍了MySQL中列如何以逗号分隔转成多行问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MySQL列以逗号分隔转成多行

业务场景:

在数据库中,有一张的一个字段存储方式是采用以逗号分隔存储多个值,现在需要将其进行拆分成多个独立的值,与另外一张字典表进行关联,取的最终的字典表中的 label,再以逗号拼接成显示 label 的形式展现。

场景

表中存储的值:

MySQL中列如何以逗号分隔转成多行

期待最终的展现效果:

甜品,休闲食品,饮料

解决方案

1. 将一列转成多行

  1. select v1.id,SUBSTRING_INDEX(SUBSTRING_INDEX(v1.intention_exhibits, ',', b.help_topic_id + 1), ',', - 1) AS exhibit
  2. from test v1
  3. JOIN mysql.help_topic AS b ON b.help_topic_id < (length(v1.intention_exhibits) -
  4. length(REPLACE(v1.intention_exhibits, ',', '')) + 1)
  5. where v1.id = '63591ee4f8204212837e447b34c61fef';

MySQL中列如何以逗号分隔转成多行

说明:

mysql.help_topic 表的自增id是从0开始,所以在进行截取时要对id进行+1。【系统表,不建议使用,真正的线上环境,dba 是不允许使用系统表的,所以,我们需要自己创建一张类似的表】

创建一张自增表,来代替 mysql.help_topic 系统表,自增表的值,需要大于自己业务表中逗号拆出来的集合数:

  1. create table add_self
  2. (
  3. id int(20) null
  4. );
  5.  
  6. INSERT INTO add_self (id) VALUES (0);
  7. INSERT INTO add_self (id) VALUES (1);
  8. INSERT INTO add_self (id) VALUES (2);
  9. INSERT INTO add_self (id) VALUES (3);
  10. INSERT INTO add_self (id) VALUES (4);
  11. INSERT INTO add_self (id) VALUES (5);
  12. INSERT INTO add_self (id) VALUES (6);
  13. INSERT INTO add_self (id) VALUES (7);
  14. INSERT INTO add_self (id) VALUES (8);
  15. INSERT INTO add_self (id) VALUES (9);
  16. INSERT INTO add_self (id) VALUES (10);

2. 最终 SQL

  1. select group_concat(edn.name)
  2. from (
  3. select v1.id,SUBSTRING_INDEX(SUBSTRING_INDEX(v1.intention_exhibits, ',', b.id + 1), ',', - 1) AS exhibit
  4. from test1 v1
  5. JOIN add_self AS b ON b.id < (length(v1.intention_exhibits) -
  6. length(REPLACE(v1.intention_exhibits, ',', '')) + 1)
  7. where v1.id = '63591ee4f8204212837e447b34c61fef') t
  8. left join test2 edn on t.exhibit = edn.local_key;

MySQL中列如何以逗号分隔转成多行

使用到的相关函数:

  • group_concat
  • substring_index
  • length

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_20315217/article/details/123473365

延伸 · 阅读

精彩推荐
  • MysqlMYSQL数据库基础之Join操作原理

    MYSQL数据库基础之Join操作原理

    这篇文章主要给大家介绍了关于MYSQL数据库基础之Join操作原理的相关资料,连接(join)查询是将两个查询的结果以“横向对接”的方式合并起来的结果,需要的...

    某某小孩4552021-08-30
  • Mysql创建一个实现Disqus评论模版的MySQL模型

    创建一个实现Disqus评论模版的MySQL模型

    这篇文章主要介绍了创建一个实现Disqus评论模版的MySQL模型,Disqus网站的数据库采用PostgreSQL,而作者则以MySQL来实现,需要的朋友可以参考下 ...

    MYSQL教程网2932020-05-12
  • Mysqlmysql密码忘记后如何修改密码(2022年最新版详细教程保姆级)

    mysql密码忘记后如何修改密码(2022年最新版详细教程保姆级)

    因为长时间不操作mysql而忘记root密码的朋友估计不在少数,下面这篇文章主要给大家介绍了关于mysql密码忘记后如何修改密码的相关资料,本教程是2022年最新...

    Concise2004832022-10-20
  • MysqlMysql事务中Update是否会锁表?

    Mysql事务中Update是否会锁表?

    这篇文章主要给大家介绍了关于Mysql事务中Update是否会锁表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价...

    Young丶6642021-03-18
  • MysqlMYSQL的binary解决mysql数据大小写敏感问题的方法

    MYSQL的binary解决mysql数据大小写敏感问题的方法

    BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写 ...

    MYSQL教程网4832020-01-09
  • MysqlLinux下mysql异地自动备份的方法

    Linux下mysql异地自动备份的方法

    这篇文章主要介绍了Linux下mysql异地自动备份的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    Bainily_Wu6622021-01-21
  • MysqlLinux(Ubuntu)下mysql5.7.17安装配置方法图文教程

    Linux(Ubuntu)下mysql5.7.17安装配置方法图文教程

    这篇文章主要为大家详细介绍了Linux下mysql5.7.17安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    AskTommorow6592020-07-12
  • Mysql关于MySQL innodb_autoinc_lock_mode介绍

    关于MySQL innodb_autoinc_lock_mode介绍

    下面小编就为大家带来一篇关于MySQL innodb_autoinc_lock_mode介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    jingxian4012020-07-20