MySQL でカンマ区切り値を個々の行に変換する
このガイドでは、MySQL 列内のカンマ区切り値を個々の行に変換する方法を説明します。 次のようなカンマ区切りのデータを含む列を持つテーブルがあるとします。
<code>somethingA,somethingB,somethingC somethingElseA, somethingElseB</code>
目的は、このデータを次のように再構成することです。
<code>somethingA somethingB somethingC somethingElseA somethingElseB</code>
この SQL クエリは次の変換を実現します:
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN ( SELECT a.N + b.N * 10 + 1 n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b ORDER BY n ) n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
説明:
このクエリは、動的に生成された数値テーブル (サブクエリ) と SUBSTRING_INDEX()
関数を巧みに使用しています。 SUBSTRING_INDEX()
は、区切り文字に基づいて部分文字列を抽出します。数値テーブルは、各カンマ区切り値のインデックスを提供します。 WHERE
句により、クエリは各行のカンマ区切り要素の実際の数までの値のみを処理するようになります。
キーポイント:
SUBSTRING_INDEX(string, delimiter, count)
: この機能は重要です。 string
は入力、delimiter
はカンマ、count
は使用する区切り文字を指定します。 count
の -1
は、最後に出現した区切り文字の 以降 をすべて取得します。WHERE
句は、元の文字列内のカンマの数に基づいて返される行数を動的に調整し、エラーを防ぎます。この方法では、カンマ区切りの値が効果的に個々の行に分割され、よりクリーンで管理しやすいデータセットが得られます。
以上がMySQL でカンマ区切り値を個々の行に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。