집 >데이터 베이스 >MySQL 튜토리얼 >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
을 사용하여 @Reviewers
및 UserID
테이블을 조인합니다.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!