在 MySQL 中拆分逗号分隔列表
将数据迁移到系统时,使用包含逗号分隔外键值的非规范化表可能具有挑战性缺乏过程语言。为了解决这个问题,MySQL 提供了一种方法将这些列表转换为规范化的行。
使用 FIND_IN_SET() 函数
将逗号分隔的列表拆分为多个行,MySQL 提供了 FIND_IN_SET() 函数。此函数返回列表中特定值的位置。使用此函数,您可以迭代列表中的每个值并将新行插入到临时表中。
以下查询演示如何将给定表中的“材料”列拆分为规范化行:
CREATE TEMPORARY TABLE split_materials ( part_id INT, material_id INT ); INSERT INTO split_materials (part_id, material_id) SELECT part_id, CAST(SUBSTRING_INDEX(material, ';', 1) AS UNSIGNED) FROM my_table; INSERT INTO split_materials (part_id, material_id) SELECT part_id, CAST(SUBSTRING_INDEX(material, ';', -1) AS UNSIGNED) FROM my_table WHERE material LIKE '%,%';
替代解决方案
如果 FIND_IN_SET() 函数不是适当的,您还可以探索使用:
结论
在 MySQL 中将逗号分隔的列表拆分为多行可以使用 FIND_IN_SET() 函数、正则表达式或 JOIN 来实现。这允许您规范化非规范化数据并准备将其引入不支持过程语言的系统。
以上是如何在 MySQL 中拆分逗号分隔的列表以实现数据规范化?的详细内容。更多信息请关注PHP中文网其他相关文章!