一尘不染

MySQL:将逗号分隔的列表分成多行

mysql

我有一个未标准化的表,其中的列包含逗号分隔的列表,该列表是另一个表的外键:

+----------+-------------+   +--------------+-------+
| part_id  | material    |   | material_id  | name  |
+----------+-------------+   +--------------+-------+
|      339 | 1.2mm;1.6mm |   |            1 | 1.2mm |
|      970 | 1.6mm       |   |            2 | 1.6mm |
+----------+-------------+   +--------------+-------+

我想将此数据读入不提供过程语言的搜索引擎中。

那么,有没有一种方法, 要么 就这一栏中加入 该数据运行查询插入相应的条目到一个新的表?结果数据应如下所示:

+---------+-------------+
| part_id | material_id |
+---------+-------------+
|     339 |           1 |
|     339 |           2 |
|     970 |           2 |
+---------+-------------+

如果DBMS支持返回表的函数,但MySQL显然不支持,我可以想到一个解决方案。


阅读 283

收藏
2020-05-17

共1个答案

一尘不染

在MySQL中,可以通过以下方式实现

SELECT id, length FROM vehicles WHERE id IN ( 117, 148, 126)

+---------------+
| id  | length  |
+---------------+
| 117 | 25      |
| 126 | 8       |
| 148 | 10      |
+---------------+

SELECT id,vehicle_ids FROM load_plan_configs WHERE load_plan_configs.id =42

+---------------------+
| id  | vehicle_ids   |
+---------------------+
| 42  | 117, 148, 126 |
+---------------------+

现在要获取逗号分隔的vehicle_ids的长度,请使用以下查询

Output

SELECT length 
FROM   vehicles, load_plan_configs   
WHERE  load_plan_configs.id = 42 AND FIND_IN_SET(
       vehicles.id, load_plan_configs.vehicle_ids
)

+---------+
| length  |
+---------+
| 25      |
| 8       |
| 10      |
+---------+

有关更多信息,请访问http://amitbrothers.blogspot.in/2014/03/mysql-split-comma-
separated-list-into.html

2020-05-17