mysql列转行

需求:将表

id column
1 A,B,C
2 D,E

转为表

id column
1 A
1 B
1 C
2 D
2 E

新建表:test

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `c` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `test` VALUES ('1', 'A,B,C');
INSERT INTO `test` VALUES ('2', 'D,E');

新建表:seq

DROP TABLE IF EXISTS `seq`;
CREATE TABLE `seq`  (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `seq` VALUES (1);
INSERT INTO `seq` VALUES (2);
INSERT INTO `seq` VALUES (3);
INSERT INTO `seq` VALUES (4);

如图所示:


seq.png
test.png

运行sql

SELECT
    t.id,
    SUBSTRING_INDEX( SUBSTRING_INDEX( t.c, ',', s.id ), ',', - 1 ) 
FROM
    test t
    JOIN seq s ON s.id <= ( LENGTH( t.c ) - LENGTH( REPLACE ( t.c, ',', '' ) ) + 1 )

可得


结果.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • mysql查询含逗号的数据,将逗号拆分为多行展示: 原始数据如下: IDVALUE1yang,zheng,song...
    米小河123阅读 9,128评论 0 2
  • 数据表 列转行:利用max(case when then) 合并字段显示:利用group_cancat(cours...
    熊航阅读 4,053评论 0 0
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 4,826评论 0 0
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,150评论 0 13
  • 选择题部分 1.(),只有在发生短路事故时或者在负荷电流较大时,变流器中才会有足够的二次电流作为继电保护跳闸之用。...
    skystarwuwei阅读 14,681评论 0 7