首页 >数据库 >mysql教程 >如何在 MySQL 中拆分逗号分隔的列表以实现数据规范化?

如何在 MySQL 中拆分逗号分隔的列表以实现数据规范化?

Linda Hamilton
Linda Hamilton原创
2025-01-06 11:41:411043浏览

How to Split Comma-Separated Lists in MySQL for Data Normalization?

在 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() 函数不是适当的,您还可以探索使用:

  • 正则表达式从列表中提取值。
  • JOIN操作将外键的逗号分隔列表table.

结论

在 MySQL 中将逗号分隔的列表拆分为多行可以使用 FIND_IN_SET() 函数、正则表达式或 JOIN 来实现。这允许您规范化非规范化数据并准备将其引入不支持过程语言的系统。

以上是如何在 MySQL 中拆分逗号分隔的列表以实现数据规范化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn