mysql - 如何将 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
谢谢你们
解决方案
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
推荐阅读
- java - 当android应用程序未安装时我们如何向服务器发送数据
- python - 用于 3D 体数据的 TensorFlow 数据管道
- php - 如何将数据和 url 从 ajax 传递到控制器?
- python - 结果 cv2.matchTemplate 不是预期的
- vba - Microsoft Word Templete VBA 代码在注销/登录后消失了
- python - 使用 python 连续保存和迭代文件。什么可能是一个不错的选择?
- port - 如何更改 Liquibase 示例指定的 H2 数据库控制台端口号?
- api - 用于自定义 ecwid 存储的 Ecwid API
- javascript - 如何使用 Node.JS/Javascript 在 JSON 文件中编辑奇异值
- r - 如何使用列表名称列表创建新列表