首页 > 数据库 > mysql教程 > 如何在 MySQL 中高效拆分逗号分隔列表?

如何在 MySQL 中高效拆分逗号分隔列表?

Susan Sarandon
发布: 2025-01-06 11:36:40
原创
549 人浏览过

How to Split Comma-Separated Lists in MySQL Efficiently?

在 MySQL 中拆分逗号分隔列表

要使用逗号分隔列表处理非规范化数据,有两种方法:加入或插入一张新桌子。

加入方法:

  1. 创建一个临时表,其中包含逗号分隔列表中的唯一值:
CREATE TEMP TABLE UNIQUE_MATERIALS AS
SELECT DISTINCT TRIM(MATERIAL) AS MATERIAL FROM PART_TABLE;
登录后复制
  1. 将原始表与MATERIAL 列上的临时表以将列表扩展为rows:
SELECT p.part_id, m.material_id
FROM PART_TABLE p
JOIN UNIQUE_MATERIALS m ON p.MATERIAL LIKE CONCAT('%', m.MATERIAL, '%');
登录后复制

插入方法:

  1. 使用 REPLACE 命令将新行插入到新表中(SPLIT_MATERIALS):
CREATE TABLE SPLIT_MATERIALS (part_id INT, material_id INT);
INSERT INTO SPLIT_MATERIALS (part_id, material_id)
VALUES
  (339, 1),
  (339, 2),
  (970, 2);
登录后复制
  1. 通过迭代每个逗号分隔值并插入一行来填充新表:
INSERT INTO SPLIT_MATERIALS (part_id, material_id)
SELECT part_id, STR_TO_INT(TRIM(SUBSTR(MATERIAL, pos - 1, INSTR(MATERIAL, ',', pos) - pos + 1)))
FROM PART_TABLE,
  (SELECT @pos := 1) AS vars,
  (SELECT INSTR(MATERIAL, ',')) AS tmp
WHERE STR_TO_INT(SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1)) IS NOT NULL
  AND INSTR(MATERIAL, ',', @pos) > 0
GROUP BY part_id, STR_TO_INT(SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1))
ORDER BY part_id, SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1);
登录后复制

一旦新表已填充,可以将其与原始表连接以进行需要分隔的查询价值观。

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板