>데이터 베이스 >MySQL 튜토리얼 >두 테이블에서 쉼표로 구분된 데이터 열을 조인하는 방법은 무엇입니까?

두 테이블에서 쉼표로 구분된 데이터 열을 조인하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-03 15:31:391026검색

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

쉼표로 구분된 데이터 열 결합

데이터 테이블에는 셀 내에 쉼표로 구분된 값이 포함되는 경우가 많습니다. 이러한 값을 추출하고 정규화하는 것은 추가 데이터 분석에 중요할 수 있습니다. 이 기사에서는 쉼표로 구분된 데이터를 두 테이블에 결합하고 결과를 통합 형식으로 표시하는 기술을 살펴보겠습니다.

다음 두 테이블을 고려하세요.

표 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의 col2 열에 저장된 값을 나타냅니다.

하위 쿼리로 조인(FOR XML PATH):

정규화가 가능하지 않은 경우 FOR XML PATH 절과 함께 하위 쿼리를 사용하여 쉼표로 구분된 값을 단일 문자열로 표시합니다.

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;

분할 함수로 결합:

또는 분할이라는 사용자 정의 함수를 생성하여 개별 항목을 추출할 수 있습니다. 쉼표로 구분된 문자열의 값.

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 기능을 사용하면 다음 중 하나를 수행할 수 있습니다. 개별 값을 별도의 행에 저장하거나 다시 쉼표로 구분된 문자열로 연결합니다.

위 내용은 두 테이블에서 쉼표로 구분된 데이터 열을 조인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.