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