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

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

Mary-Kate Olsen
풀어 주다: 2024-12-29 01:07:10
원래의
454명이 탐색했습니다.

How to Join Comma-Delimited Data Columns in SQL?

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

도전 과제:

두 개의 테이블이 주어지고 하나는 쉼표로 구분된 데이터가 있습니다. 열에서 작업은 테이블에서 데이터를 검색하고 결과를 쉼표로 구분된 값으로 표시하는 것입니다. 각 행에 대해 단일 문자열로 결합됩니다.

해결책:

정규화:

이상적인 접근 방식은 쉼표를 사용하여 테이블을 정규화하는 것입니다. -분리된 데이터 열로 복잡한 문자열 조작이 필요하지 않습니다. 쉼표로 구분된 각 값이 새 행이 되는 새 테이블을 생성하면 공통 필드에서 테이블을 쉽게 조인할 수 있습니다.

분할 함수:

If 정규화가 불가능하면 쉼표로 구분된 값을 결합할 수 있는 행으로 변환하는 분할 함수를 만들 수 있습니다. 그런 다음 이 함수를 사용하여 데이터를 여러 행에 남겨두거나 값을 다시 쉼표로 구분된 목록으로 연결할 수 있습니다.

XML PATH 및 STUFF의 경우:

또는 FOR XML PATH 및 STUFF 기술을 사용하여 데이터를 검색할 수 있습니다. FOR XML PATH는 쉼표로 구분된 값을 XML로 변환하고 STUFF를 사용하여 XML을 단일 문자열로 연결할 수 있습니다.

직접 FOR XML PATH 애플리케이션:

마지막 접근 방식은 FOR XML PATH를 데이터 열에 직접 적용하는 것입니다. 원하는 열을 선택하고 적절한 쿼리를 사용하면 쉼표로 구분된 값을 검색하여 단일 문자열로 집계할 수 있습니다.

구현 세부 정보:

선택한 접근 방식에 따라 구현이 달라집니다. 달라질 것입니다. 다음 예는 각 방법을 구현할 수 있는 방법에 대한 간략한 개요를 제공합니다.

정규화:

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 경로 및 내용:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿