[mysql] 一行变多行

  1. 数据表
CREATE TABLE `table_main` (
  `ID` char(36) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
  `zb_list_str` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci ,
  `kf_list_str` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci,
  PRIMARY KEY (`ID`) USING BTREE,

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ;

在这里插入图片描述

  1. 一行变多行
SELECT
*
FROM
  table_main,
  JSON_TABLE (
    JSON_EXTRACT( CONCAT( '["', REPLACE ( zb_list_str, ',', '","' ), '"]' ), '$' ),
  '$[*]' COLUMNS (id FOR ORDINALITY,  `zb` VARCHAR (255) PATH '$' )) AS t_zb JOIN 
  JSON_TABLE (
    JSON_EXTRACT( CONCAT( '["', REPLACE ( kf_list_str, ',', '","' ), '"]' ), '$' ),
  '$[*]' COLUMNS (id FOR ORDINALITY,`kf` VARCHAR (255) PATH '$' )) AS t_kf 

在这里插入图片描述

  1. 步骤解释说明
  1. 用CONCAT() 和REPLACE () 将待拆分字符串str str_part1,str_part2,str_part3 拼成json数组格式的字符串json_array_str “[“str_part1”,“str_part2”,“str_part3”]”
  2. 用JSON_EXTRACT() 将json_array_str 转成 json_array
  3. 用JSON_TABLE () (对mysql 版本有要求) 将json_array渲染成一个表格(可以有多行)即可
  1. 其他
  • 可以同时如此操作多个字段
  • 每个字段拆分出来的表格(如t_zb)可像普通表格一样进行join等操作(示例中需要两张表的笛卡尔积)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值