>데이터 베이스 >MySQL 튜토리얼 >FOR XML PATH()를 사용하여 T-SQL의 여러 레코드에서 사용자 이름을 연결하는 방법은 무엇입니까?

FOR XML PATH()를 사용하여 T-SQL의 여러 레코드에서 사용자 이름을 연결하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-15 06:58:42182검색

How to Concatenate User Names from Multiple Records in T-SQL Using FOR XML PATH()?

FOR XML PATH()를 사용하여 T-SQL에서 사용자 이름을 효율적으로 결합

과제: 다대다 관계의 여러 테이블이 포함된 복잡한 데이터베이스 구조 내에서 여러 레코드의 사용자 이름을 결합해야 합니다. 목표는 두 테이블의 데이터를 표시하고 세 번째 테이블의 이름을 연결하여 각 리뷰와 연관된 쉼표로 구분된 사용자 이름(FName) 목록을 만드는 것입니다.

해결책: FOR XML PATH() 활용

FOR XML PATH() 메서드는 이 문자열 연결 작업에 대한 간결한 솔루션을 제공합니다. T-SQL 코드는 다음과 같습니다.

<code class="language-sql">SELECT  *,
        ( 
            SELECT  u.FName + ','
            FROM    @Users u INNER JOIN 
                    @Reviewers rs ON u.UserID = rs.UserID
            WHERE   rs.ReviewID = r.ReviewID
            FOR XML PATH('')
        ) AS UserNames
FROM    @Reviews r</code>

분류:

  • 기본 SELECT 문은 * 테이블에서 모든 열(@Reviews)을 검색합니다.
  • 중첩된 SELECT 문은 연결을 수행합니다. 사용자를 리뷰에 연결하기 위해 @Users을 사용하여 @ReviewersUserID 테이블을 조인합니다.
  • WHERE 절은 현재 리뷰와 관련된 사용자만 포함하도록 사용자를 필터링합니다(ReviewID 일치).
  • FOR XML PATH('')은 연결된 FName 값을 단일 XML 문자열로 변환하여 효과적으로 쉼표로 구분된 목록을 생성합니다(후행 쉼표를 처리해야 합니다. 아래 참조).
  • 결과는 UserNames 열에 할당됩니다.

출력 및 개선:

이 쿼리는 원하는 결과를 생성합니다. 각 리뷰의 세부 정보(ReviewID, ReviewDate 등)가 연결된 사용자 이름의 쉼표로 구분된 목록과 함께 표시됩니다. 후행 쉼표를 제거하려면 STUFF 함수를 사용할 수 있습니다.

<code class="language-sql">SELECT  *,
        STUFF(( 
            SELECT  ',' + u.FName
            FROM    @Users u INNER JOIN 
                    @Reviewers rs ON u.UserID = rs.UserID
            WHERE   rs.ReviewID = r.ReviewID
            FOR XML PATH('')
        ), 1, 1, '') AS UserNames
FROM    @Reviews r</code>

이 개선된 버전에서는 ',' u.FName을 사용하여 앞에 쉼표를 추가한 다음 STUFF에서 선행 쉼표를 제거하여 쉼표로 구분된 깔끔한 사용자 이름 목록을 제공합니다.

위 내용은 FOR XML PATH()를 사용하여 T-SQL의 여러 레코드에서 사용자 이름을 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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