집 >데이터 베이스 >MySQL 튜토리얼 >단일 SQL 쿼리로 특정 조직의 모든 직원 레코드를 검색하려면 어떻게 해야 합니까?
단일 결과 세트에서 조직과 연결된 여러 직원 레코드 검색
당면 작업에는 지정된 조직의 모든 세부 정보를 가져오는 것이 포함됩니다. 직원의 이름과 함께. SQL-92 또는 SQL-99에는 보편적인 솔루션이 없기 때문에 이 문제를 해결하려면 데이터베이스 공급업체별 접근 방식을 고려해야 합니다.
MySQL의 경우 GROUP_CONCAT 함수를 사용하면 다음을 효율적으로 검색할 수 있습니다. 연결된 값. 이 함수를 활용하는 쿼리는 다음과 유사할 수 있습니다.
SELECT o.ID, o.Address, o.OtherDetails, GROUP_CONCAT( CONCAT(e.firstname, ' ', e.lastname) ) AS Employees FROM employees e JOIN organization o ON o.org_id=e.org_id GROUP BY o.org_id;
PostgreSQL 9.0은 STRING_AGG 함수를 사용하여 똑같이 간단한 솔루션을 제공합니다.
SELECT o.ID, o.Address, o.OtherDetails, STRING_AGG( (e.firstname || ' ' || e.lastname), ', ' ) AS Employees FROM employees e JOIN organization o ON o.org_id=e.org_id GROUP BY o.org_id;
9.0 이전 버전의 PostgreSQL의 경우 CREATE AGGREGATE 명령을 사용하면 사용자 정의 집계 함수 정의가 가능합니다.
Oracle은 유사한 기능을 위해 LISTAGG를 사용하고 MS SQL Server는 STRING_AGG를 사용합니다.
내장된 그룹 연결 기능이 없는 경우 대체 옵션에는 조직 ID를 입력으로 받아들이고 연결된 직원을 반환하는 저장 프로시저를 만드는 작업이 포함됩니다. 이름. 그런 다음 이 저장 프로시저를 쿼리 내에서 활용할 수 있습니다.
SELECT o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) AS Employees FROM organization o;
이러한 공급업체별 접근 방식을 사용하면 단일 결과 집합에서 단일 조직과 관련된 여러 직원 기록을 검색할 수 있습니다.
위 내용은 단일 SQL 쿼리로 특정 조직의 모든 직원 레코드를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!