ホームページ >データベース >mysql チュートリアル >MySQL でカンマ区切りリストを効率的に分割するにはどうすればよいですか?

MySQL でカンマ区切りリストを効率的に分割するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-06 11:36:40553ブラウズ

How to Split Comma-Separated Lists in MySQL Efficiently?

MySQL でのカンマ区切りリストの分割

カンマ区切りリストを含む正規化されていないデータを処理するには、結合または挿入という 2 つの方法があります。新しいテーブル。

結合アプローチ:

  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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。