我有一个表“案例”,其中包含一个名为“标签”的字段字符串字段,其中包含由 |
分隔的标签。特点:
案例
+----+-------------------+
| Id | Tags |
+----+-------------------+
| 12 | "car|plane|truck" |
| 11 | "plane" |
+----+-------------------+
我想创建一个新表来映射这些标签,如下所示:标签
+----+---------+-------+
| Id | case_id | tag |
+----+---------+-------+
| 1 | 12 | car |
| 2 | 12 | plane |
| 3 | 12 | truck |
| 4 | 11 | plane |
+----+---------+-------+
如上所述,如何编写 sql 语句来创建表上的每条记录?谢谢!
最佳答案
解决方案有点复杂:
set @id = 0;
select
@id:=(@id + 1) as id,
id as case_id,
JSON_UNQUOTE(
JSON_EXTRACT(
CONCAT('["', REPLACE(tags, '|', '", "'), '"]'), -- format string as JSIN array
CONCAT('$[',pos,']')
)
) tag
from Tags
join JSON_TABLE( -- join series pseudo table
"[0,1,2,3]", -- this array length must be equal max tag elements length
"$[*]"
COLUMNS(pos varchar(255) PATH '$')
) as seq
on seq.pos<JSON_LENGTH(CONCAT('["', REPLACE(tags, '|', '", "'), '"]'))
;
DB Fiddle exampleid case_id tag
1 11 plane
2 12 car
3 12 plane
4 12 truck
附注此解决方案仅适用于 MySQL 8
关于mysql - 如何从 MySQL 表中的连接字段创建新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63061875/