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

 更新时间:2023年02月07日 09:46:57   作者:搬运Gong  
这篇文章主要介绍了MySQL中列如何以逗号分隔转成多行问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MySQL列以逗号分隔转成多行

业务场景:

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

场景

表中存储的值:

期待最终的展现效果:

        甜品,休闲食品,饮料

解决方案

1. 将一列转成多行

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

说明:

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

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

create table add_self
(
    id int(20) null
);
 
INSERT INTO add_self (id) VALUES (0);
INSERT INTO add_self (id) VALUES (1);
INSERT INTO add_self (id) VALUES (2);
INSERT INTO add_self (id) VALUES (3);
INSERT INTO add_self (id) VALUES (4);
INSERT INTO add_self (id) VALUES (5);
INSERT INTO add_self (id) VALUES (6);
INSERT INTO add_self (id) VALUES (7);
INSERT INTO add_self (id) VALUES (8);
INSERT INTO add_self (id) VALUES (9);
INSERT INTO add_self (id) VALUES (10);

2. 最终 SQL

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

使用到的相关函数:

  • group_concat
  • substring_index
  • length

总结

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

相关文章

  • MySQL的子查询中FROM和EXISTS子句的使用教程

    MySQL的子查询中FROM和EXISTS子句的使用教程

    这篇文章主要介绍了MySQL的子查询中FROM和EXISTS子句的使用教程,子查询是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-12-12
  • MySQL表结构变更你不可不知的Metadata Lock详解

    MySQL表结构变更你不可不知的Metadata Lock详解

    这篇文章主要给大家介绍了关于MySQL表结构变更你不可不知的Metadata Lock的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • MySQL大小写敏感的注意事项

    MySQL大小写敏感的注意事项

    MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。如果你稍加不注意就会出现在本机开发的程序运行一切正常,发布到服务器行就出现表名找不到的问题,一头雾水。
    2021-05-05
  • MySQL索引设计原则深入分析讲解

    MySQL索引设计原则深入分析讲解

    为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。索引设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍。高效的索引对于获得良好的性能非常重要。设计索引时,应该考虑相应准则
    2023-01-01
  • Mysql中的NULL和Empty String

    Mysql中的NULL和Empty String

    这篇文章主要介绍了Mysql中的NULL和Empty String知识,需要的朋友可以参考下
    2017-12-12
  • MySQL数据库InnoDB引擎主从复制同步经验总结

    MySQL数据库InnoDB引擎主从复制同步经验总结

    这篇文章主要介绍了MySQL数据库InnoDB引擎主从复制同步经验总结,本文总结了设置主从复制时遇到的一些错误和解决方法,需要的朋友可以参考下
    2015-01-01
  • mysql大小写敏感导致程序无法启动的问题

    mysql大小写敏感导致程序无法启动的问题

    这篇文章主要介绍了mysql大小写敏感导致程序无法启动的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • mysql索引(覆盖索引,联合索引,索引下推)

    mysql索引(覆盖索引,联合索引,索引下推)

    这篇文章主要介绍了mysql索引(覆盖索引,联合索引,索引下推),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Mysql两种情况下更新字段中部分数据的方法

    Mysql两种情况下更新字段中部分数据的方法

    Mysql更新字段中部分数据的两种情况在下文给予详细的解决方法,感兴趣的朋友可以参考下哈
    2013-05-05
  • MySQL数据,查询QPS,TPS数据方式

    MySQL数据,查询QPS,TPS数据方式

    文章详细介绍了查询MySQL数据库QPS和TPS的方法和工具,包括直接通过命令行、PerformanceSchema、mysqladmin、Prometheus、自动化脚本等,同时,还提供了优化建议,如索引优化、SQL调优、事务控制和配置调优
    2025-02-02

最新评论