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

MySQL でカンマ区切りのリストを複数の行に分割するにはどうすればよいですか?

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

How to Split Comma-Separated Lists into Multiple Rows in MySQL?

MySQL でカンマ区切りのリストを複数の行に分割する

問題:

テーブル別のテーブルへの外部キーとして機能する、カンマ区切りの値を持つ列が含まれています。このデータを結合またはクエリを通じて処理して、新しいテーブルに複数のエントリを作成し、データを効果的に「非正規化」するにはどうすればよいでしょうか?

解決策:

MySQL は、FIND_IN_SET() を使用してこれらのカンマ区切りリストを分割するソリューションを提供します。 function.

SELECT material_id
FROM materials
WHERE FIND_IN_SET(name, part.material) > 0;

このクエリは、パーツ テーブルの材料列のカンマ区切りリストに存在する材料テーブル内の各名前の材料 ID を取得します。結果は、必要に応じて、part_id とmaterial_id のペアを含むフラット化されたテーブルになります。

例:

次のデータについて考えてみましょう:

+---------+-------------+
| part_id | material    |
+---------+-------------+
|     339 | 1.2mm;1.6mm |
|     970 | 1.6mm       |
+---------+-------------+

次のクエリは、material 列を個別の行に分割します:

SELECT part_id, material_id
FROM materials
WHERE FIND_IN_SET(name, part.material) > 0;

結果は次のようになります:

+---------+-------------+
| part_id | material_id |
+---------+-------------+
|     339 |           1 |
|     339 |           2 |
|     970 |           2 |
+---------+-------------+

以上がMySQL でカンマ区切りのリストを複数の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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