在 MySQL 中将逗号分隔的列表拆分为多行
问题:
一张表包含一个带有逗号分隔值的列,这些值用作另一个表的外键。如何通过连接或查询来处理这些数据,以在新表中创建多个条目,从而有效地“非规范化”数据?
解决方案:
MySQL 提供了一个使用 FIND_IN_SET() 拆分这些逗号分隔列表的解决方案函数。
SELECT material_id FROM materials WHERE FIND_IN_SET(name, part.material) > 0;
此查询检索材料表中每个名称的material_id,该名称出现在零件表材料列中以逗号分隔的列表中。结果是根据需要包含part_id和material_id对的展平表。
示例:
考虑以下数据:
+---------+-------------+ | part_id | material | +---------+-------------+ | 339 | 1.2mm;1.6mm | | 970 | 1.6mm | +---------+-------------+
以下查询会将材料列拆分为单独的行:
SELECT part_id, material_id FROM materials WHERE FIND_IN_SET(name, part.material) > 0;
结果将是:
+---------+-------------+ | part_id | material_id | +---------+-------------+ | 339 | 1 | | 339 | 2 | | 970 | 2 | +---------+-------------+
以上是如何在 MySQL 中将逗号分隔的列表拆分为多行?的详细内容。更多信息请关注PHP中文网其他相关文章!