首页 > 解决方案 > 如何将 MySQL 数组值展平并复制多行

问题描述

我想从这里展平“ids”列值

数据0 数据1 数据2 身份证
1 一个 b [101,102,103]
2 C d [104,105]
3 e F [106]

到这张桌子

数据0 数据1 数据2 身份证
1 一个 b 102
1 一个 b 103
2 C d 104
2 C d 105
3 e F 106

DB : Mysql 5.7.32

谢谢你们

标签: mysql

解决方案


SELECT data0, data1, data2, JSON_EXTRACT(ids, CONCAT('$[', i, ']')) id
FROM test
-- up to 6 separate values per `ids` value are parsed
JOIN ( SELECT 0 i UNION ALL
       SELECT 1   UNION ALL
       SELECT 2   UNION ALL
       SELECT 3   UNION ALL
       SELECT 4   UNION ALL
       SELECT 5 ) numbers ON JSON_EXTRACT(ids, CONCAT('$[', i, ']')) IS NOT NULL;

或者

SELECT data0, data1, data2, JSON_EXTRACT(ids, CONCAT('$[', i, ']')) id
FROM test
JOIN ( SELECT 0 i UNION ALL
       SELECT 1   UNION ALL
       SELECT 2   UNION ALL
       SELECT 3   UNION ALL
       SELECT 4   UNION ALL
       SELECT 5 ) numbers
HAVING id IS NOT NULL;

https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=519d259e7f53b5365bd515e14c3eb938


推荐阅读