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

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

Jan 03, 2025 pm 03:31 PM

How to Join Comma-Delimited Data Columns from Two Tables?

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

データ テーブルには多くの場合、セル内にカンマ区切りの値が含まれます。これらの値を抽出して正規化することは、さらなるデータ分析にとって重要な場合があります。この記事では、2 つのテーブルのカンマ区切りデータを結合し、結果を統合形式で表示する手法を検討します。

次の 2 つのテーブルについて考えてみましょう。

テーブル 1 ( T1)

col1 col2
C1 john
C2 alex
C3 piers
C4 sara

表 2 (T2)

col1 col2
R1 C1,C2,C4
R2 C3,C4
R3 C1,C4

希望結果:

col1 col2
R1 john,alex,sara
R2 piers,sara
R3 john,sara

解決策:

正規化:

理想的な解決策は、表 2 を正規化することです。カンマ区切りの値を別のリレーションに分割することによって。これにより、col1 とcol2 の 2 つの列を持つ新しいテーブルが作成されます。各行は、テーブル 2 のcol2 列に以前に格納されていた値を表します。

サブクエリと結合 (FOR XML PATH):

正規化が不可能な場合は、サブクエリを FOR XML PATH 句とともに使用して、カンマ区切りのデータを取得できます。

1

2

3

4

5

6

7

8

SELECT col1,

(

  SELECT ', '+t1.col2

  FROM t1

  WHERE ','+t2.col2+',' LIKE '%,'+CAST(t1.col1 AS VARCHAR(10))+',%'

  FOR XML PATH(''), TYPE

).value('substring(text()[1], 3)', 'VARCHAR(MAX)') AS col2

FROM t2;

ログイン後にコピー

Split 関数で結合:

あるいは、Split というユーザー定義関数を作成して、カンマ区切りの文字列。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

CREATE FUNCTION [dbo].[Split](@String VARCHAR(MAX), @Delimiter CHAR(1))

RETURNS @temptable TABLE (items VARCHAR(MAX))

AS

BEGIN

    DECLARE @idx INT;

    DECLARE @slice VARCHAR(8000);

 

    SELECT @idx = 1;

    IF LEN(@String) < 1 OR @String IS NULL RETURN;

 

    WHILE @idx != 0

    BEGIN

        SET @idx = CHARINDEX(@Delimiter, @String);

        IF @idx != 0

            SET @slice = LEFT(@String, @idx - 1);

        ELSE

            SET @slice = @String;

 

        IF (LEN(@slice) > 0)

            INSERT INTO @temptable(Items) VALUES (@slice);

 

        SET @String = RIGHT(@String, LEN(@String) - @idx);

        IF LEN(@String) = 0 BREAK;

    END

RETURN;

END;

ログイン後にコピー

Split 関数を使用すると、個々の値を保存できます。別々の行に並べるか、それらを連結してカンマ区切りの文字列に戻します。

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

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DockerでのMySQLメモリの使用を減らします DockerでのMySQLメモリの使用を減らします Mar 04, 2025 pm 03:52 PM

DockerでのMySQLメモリの使用を減らします

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

mysqlの問題を解決する方法共有ライブラリを開くことができません mysqlの問題を解決する方法共有ライブラリを開くことができません Mar 04, 2025 pm 04:01 PM

mysqlの問題を解決する方法共有ライブラリを開くことができません

sqliteとは何ですか?包括的な概要 sqliteとは何ですか?包括的な概要 Mar 04, 2025 pm 03:55 PM

sqliteとは何ですか?包括的な概要

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし) Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし) Mar 04, 2025 pm 03:54 PM

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド Mar 04, 2025 pm 03:49 PM

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか? 共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか? Mar 18, 2025 pm 12:00 PM

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? Mar 18, 2025 pm 12:01 PM

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?

See all articles