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

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

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-24 04:08:09983ブラウズ

How to Split Comma-Separated Values into Multiple Rows in SQL?

SQL で値を複数の行に分割する

データ処理における一般的なタスクの 1 つは、次のように、カンマ区切りの文字列を複数の行に分割することです。以下に例示されるrequest:

問題:

コンマ区切り値を含む id 列と name 列を持つテーブルが指定された場合、次の形式でデータを返します:

id name
1 a
1 b
1 c
2 b

解決策:

これを達成するには、 MySQL の SUBSTRING_INDEX 関数を、分割するフィールドの最大数までの一連の数値を含む数値テーブルと組み合わせて利用できます。以下のクエリは、このアプローチを示しています。

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

数値テーブルの作成が不可能な場合は、次のクエリを使用して、クエリ自体内で一連の数値を生成できます。

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

デモ:

[SQL フィドルデモ](https://www.sqlfiddle.com/#!5/cf4386/1)

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

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