ホームページ >データベース >mysql チュートリアル >SQL のカンマ区切り値を複数の行に分割するにはどうすればよいですか?
カンマ区切りの SQL 値を複数の行に変換する
頻繁に行われる SQL タスクには、単一セルの内容を複数の行に分割することが含まれます。 たとえば、次のテーブルについて考えてみましょう:
<code class="language-sql">id | name 1 | a,b,c 2 | b</code>
目標は、このデータを次のように再構成することです:
<code class="language-sql">id | name 1 | a 1 | b 1 | c 2 | b</code>
方法 1: 数値表を利用する
効果的な解決策の 1 つは、既存の「数値」テーブル (整数の連続リストを含むテーブル) を利用することです。 以下のクエリは、このアプローチを示しています:
<code class="language-sql">SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n</code>
方法 2: 数値を動的に生成する (数値テーブルは必要ありません)
専用の数値テーブルが利用できない場合は、クエリ自体内で一時的な数値シーケンスを生成できます。
<code class="language-sql">SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM (SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) AS numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n</code>
UNION ALL
列で予想されるカンマ区切り値の最大数に対応できるように、2 番目の方法の name
セクションを必ず調整してください。 どちらの方法でも、カンマ区切りの値を個々の行に分割するという同じ結果が得られます。
以上がSQL のカンマ区切り値を複数の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。