开发者社区 问答 正文

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显然不支持,我可以想到一个解决方案。

展开
收起
保持可爱mmm 2020-05-17 10:51:05 473 分享 版权
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 | +---------+来源:stack overflow

    2020-05-17 11:12:08
    赞同 展开评论