> 데이터 베이스 > MySQL 튜토리얼 > SQL을 사용하여 쉼표로 구분된 값으로 테이블을 조인하는 방법은 무엇입니까?

SQL을 사용하여 쉼표로 구분된 값으로 테이블을 조인하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-14 10:04:10
원래의
240명이 탐색했습니다.

How to Join Tables with Comma-Separated Values Using SQL?

쉼표로 구분된 값으로 테이블 조인: 전체 가이드

데이터베이스 테이블의 특정 열에는 쉼표로 구분된 값이 포함되는 경우가 많습니다. 각 값이 해당 행과 연결되어야 하기 때문에 데이터를 쿼리할 때 문제가 발생합니다. 일반적인 시나리오 중 하나는 한 열에 다른 테이블을 참조하는 쉼표로 구분된 값이 포함된 두 테이블을 조인하는 것입니다.

다음 예를 고려하세요.

Notes Table

nid forDepts
1 1,2,4
2 4,5

직위 테이블

id name
1 Executive
2 Corp Admin
3 Sales
4 Art
5 Marketing

Notes 테이블의 'forDepts' 열을 Positions 테이블의 해당 부서 이름과 연결하는 것이 목표입니다. 원하는 출력은 다음과 같습니다.

nid DepartmentName
1 Executive, Corp Admin, Art
2 Art, Marketing

데이터베이스 구조를 변경하지 않고도 SQL 함수 조합을 사용하여 이를 달성할 수 있습니다.

FIND_IN_SET 및 GROUP_CONCAT 사용

FIND_IN_SET 및 GROUP_CONCAT 함수 조합을 사용하여 추출할 수 있습니다. 그리고 각 'forDepts' 값에 대한 부서 이름을 집계합니다:

SELECT  a.nid,
        GROUP_CONCAT(b.name ORDER BY b.id) DepartmentName
FROM    Notes a
        INNER JOIN Positions b
            ON FIND_IN_SET(b.id, a.forDepts) > 0
GROUP   BY a.nid
로그인 후 복사

작동 방식

  • FIND_IN_SET 함수는 지정된 값이 쉼표로 구분된 문자열입니다. 이 경우 Notes 테이블의 'forDepts' 값에 Positions 테이블의 부서 ID가 포함되어 있는지 확인하는 데 사용됩니다.
  • INNER JOIN 절은 Notes 및 Positions 테이블의 행과 일치합니다. FIND_IN_SET 조건이 true입니다.
  • GROUP_CONCAT 함수는 Notes 테이블의 각 'nid'에 대해 일치하는 부서 이름을 집계합니다. ORDER BY 절을 사용하면 이름이 ID를 기준으로 오름차순으로 정렬됩니다.

Result

쿼리의 출력은 원하는 테이블이 됩니다. 'nid' 열이 쉼표로 구분된 해당 'DepartmentName'과 결합됨

결론

FIND_IN_SET 및 GROUP_CONCAT 함수를 활용하면 쉼표로 구분된 값으로 두 테이블을 효과적으로 조인하여 테이블 전체에서 데이터를 추출하고 집계할 수 있습니다. , 데이터베이스 구조가 정규화되지 않은 경우에도 마찬가지입니다. 이 기술은 Excel과 같은 다른 애플리케이션으로 데이터를 내보낼 때 특히 유용합니다.

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

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