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

SQL でカンマ区切りのデータ列を結合するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-29 01:07:10
オリジナル
454 人が閲覧しました

How to Join Comma-Delimited Data Columns in SQL?

カンマ区切りのデータ列の結合

課題:

2 つのテーブルがあり、1 つはカンマ区切りのデータを持つものとします。列のタスクは、テーブルからデータを取得し、カンマ区切りの値を結合して結果を表示することです。各行に単一の文字列を使用します。

解決策:

正規化:

理想的なアプローチは、カンマ区切りのデータ列を使用してテーブルを正規化することです。 、複雑な文字列操作の必要がなくなります。カンマで区切られた各値が新しい行となる新しいテーブルを作成すると、共通のフィールドでテーブルを簡単に結合できます。

分割関数:

If正規化が不可能な場合は、分割関数を作成して、カンマ区切りの値を結合可能な行に変換できます。この関数を使用すると、データを複数の行に残すか、値を連結してカンマ区切りのリストに戻すことができます。

FOR XML PATH and STUFF:

あるいは、FOR XML PATH および STUFF テクニックを使用してデータを取得することもできます。 FOR XML PATH はカンマ区切りの値を XML に変換し、STUFF を使用して XML を単一の文字列に連結できます。

Direct FOR XML PATH アプリケーション:

最後のアプローチは、FOR XML PATH をデータ列に直接適用することです。目的の列を選択し、適切なクエリを使用することで、カンマ区切りの値を取得し、それらを 1 つの文字列に集約できます。

実装の詳細:

選択したアプローチに応じて、実装は変わります。次の例は、各メソッドの実装方法の概要を示しています。

正規化:

CREATE TABLE NormalizedTable (
  id INT,
  value VARCHAR(255),
);

INSERT INTO NormalizedTable (id, value) VALUES
  (1, 'john'),
  (2, 'alex'),
  (3, 'piers'),
  (4, 'sara'),
  (5, 'C1'),
  (6, 'C2'),
  (7, 'C3'),
  (8, 'C4'),
  (9, 'R1'),
  (10, 'R2'),
  (11, 'R3');

SELECT DISTINCT T2.col1,
  STUFF((
    SELECT ', ' + T1.col2
    FROM NormalizedTable T1
    INNER JOIN Table2 T2 ON T1.id = T2.col2
    FOR XML PATH('')
  ), 1, 2, '');
ログイン後にコピー

分割関数:

CREATE FUNCTION dbo.Split
  (@String VARCHAR(MAX), @Delimiter CHAR(1))
RETURNS TABLE
AS RETURN
  WITH CTE AS (
    SELECT 1 AS RowNum, @String AS Value
    UNION ALL
    SELECT RowNum + 1, SUBSTRING(@String, RowNum + 1, LEN(@Delimiter))
    FROM CTE
    WHERE SUBSTRING(@String, RowNum + 1, LEN(@Delimiter)) <> ''
  )
  SELECT
    RowNum,
    Value AS Item
  FROM CTE;

-- Usage
SELECT DISTINCT T2.col1,
  STUFF((
    SELECT ', ' + T1.col2
    FROM (
      SELECT DISTINCT Value AS col2
      FROM dbo.Split(T2.col2, ',')
    ) T1
    FOR XML PATH('')
  ), 1, 2, '');
ログイン後にコピー

XML PATH およびSTUFF:

SELECT T2.col1,
  (
    SELECT ', ' + T1.col2
    FROM Table1 T1
    WHERE ',' + T2.col2 + ',' LIKE '%,' + CAST(T1.col1 AS VARCHAR(10)) + ',%'
    FOR XML PATH('')
  ).value('substring(text()[1], 3)', 'VARCHAR(MAX)') AS col2
FROM Table2 T2;
ログイン後にコピー

適切なアプローチを選択し、必要なコードを実装することで、テーブル内の各行のカンマ区切りデータを単一の文字列に効果的に結合できます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート