집 >데이터 베이스 >MySQL 튜토리얼 >여러 SQL 테이블에서 쉼표로 구분된 목록을 효율적으로 생성하는 방법은 무엇입니까?
SQL 쿼리를 통합하여 쉼표로 구분된 목록 생성
SQL에서는 여러 테이블의 데이터에서 쉼표로 구분된 목록을 생성해야 하는 경우가 많습니다. 예를 들어, 애플리케이션(id,name), 리소스(id,name), 애플리케이션Resources(id,app_id,resource_id)라는 세 개의 테이블이 있고 각 행에 다음이 포함된 모든 리소스 이름을 표시하는 테이블을 생성한다고 가정합니다. 리소스와 관련된 쉼표로 구분된 애플리케이션 목록입니다.
가장 쉬운 방법은 리소스별로 별도의 쿼리를 수행하는 것이지만 이는 비효율적입니다. 대신, 더 복잡한 SQL 기술을 활용하여 단일 쿼리로 이를 달성할 수 있습니다.
방법:
다음 SQL 쿼리는 이를 달성하는 방법을 보여줍니다.
MySQL:
<code class="language-sql">SELECT r.name, GROUP_CONCAT(a.name SEPARATOR ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name</code>
SQL 서버(2005):
<code class="language-sql">SELECT r.name, STUFF((SELECT ',' + a.name FROM APPLICATIONS a JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id WHERE ar.resource_id = r.id GROUP BY a.name FOR XML PATH(''), TYPE).value('text()[1]','NVARCHAR(max)'), 1, LEN(','), '') FROM RESOURCES r</code>
SQL 서버(2017):
<code class="language-sql">SELECT r.name, STRING_AGG(a.name, ',') FROM RESOURCES r JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id JOIN APPLICATIONS a ON a.id = ar.app_id GROUP BY r.name</code>
오라클:
Oracle에서는 문자열 집계와 조인이 다르게 처리됩니다. 특정 문자열 처리 기술에 대해서는 Oracle 설명서를 참조하십시오.
위 내용은 여러 SQL 테이블에서 쉼표로 구분된 목록을 효율적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!