집 >데이터 베이스 >MySQL 튜토리얼 >두 테이블에서 쉼표로 구분된 데이터 열을 조인하는 방법은 무엇입니까?
쉼표로 구분된 데이터 열 결합
데이터 테이블에는 셀 내에 쉼표로 구분된 값이 포함되는 경우가 많습니다. 이러한 값을 추출하고 정규화하는 것은 추가 데이터 분석에 중요할 수 있습니다. 이 기사에서는 쉼표로 구분된 데이터를 두 테이블에 결합하고 결과를 통합 형식으로 표시하는 기술을 살펴보겠습니다.
다음 두 테이블을 고려하세요.
표 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!