MySQL でのカンマ区切りリストの分割
データをシステムに移行するときに、カンマ区切りの外部キー値を含む正規化されていないテーブルの操作が困難になる場合があります手続き型言語が欠けています。この問題に対処するために、MySQL はこれらのリストを正規化された行に変換するメソッドを提供します。
FIND_IN_SET() 関数の使用
カンマ区切りのリストを複数に分割するには行に対して、MySQL は FIND_IN_SET() 関数を提供します。この関数は、リスト内の特定の値の位置を返します。この関数を使用すると、リスト内の各値を反復処理し、一時テーブルに新しい行を挿入できます。
次のクエリは、指定されたテーブルの「material」列を正規化された行に分割する方法を示しています。
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() の場合関数は適切ではありません。
結論
MySQL でカンマ区切りのリストを複数の行に分割するには、FIND_IN_SET() 関数、正規表現、または JOIN を使用します。これにより、正規化されていないデータを正規化し、手続き型言語をサポートしていないシステムに取り込む準備をすることができます。
以上がデータ正規化のために MySQL でカンマ区切りリストを分割する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。