首頁 >資料庫 >mysql教程 >如何在 MySQL 中有效率地分割逗號分隔清單?

如何在 MySQL 中有效率地分割逗號分隔清單?

Susan Sarandon
Susan Sarandon原創
2025-01-06 11:36:40514瀏覽

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