2017-12-20 6 views
-3

을 위해 가입 할 수 있습니다.하는 방법에 데이터가 나는 두 테이블 <pre><code>employees (id, employee_name, hire_date ...) </code></pre> <p>(최대) 3 명 직원 두 번째 테이블 데이터 링크 관리자</p>, 또는 두 개의 직원 또는 하나를 가지고 muliple 열

Emp_Managed (mgr_id, emp1, emp2, emp3, 
mgr_id references employees id, 
emp1 references employees id, 
emp2 references employees id, 
emp3 references employees id, 
) 

emp_managed에서 모든 데이터를 선택하고 ID를 표시하지 않고 이름 및 대여 날짜를 원합니다.

나는

어떻게 내가 할 수있는 이름을 얻고 감독과 가입하거나 다른 방법을 사용하여 emp1, emp2, EMP3있는이 매니저가 관리하는 모든 직원에 대한 고용하려는 (그러나 SELECT 절에 선택 사용되지 않음) 그래?

+1

샘플 데이터가 있습니까? 시도해 봤어? 오류가 있습니까? –

+1

잘못된 데이터 디자인 – Paparazzi

+0

[ask] 및 기타 [help] 링크를 읽고 약간의 작업을 보여주십시오. 또한 [mcve]. – philipxy

답변

1

아래와 같은 검색어로 시작합니다. 핵심은 테이블 별칭을 사용하는 것이므로 같은 테이블을 여러 번 사용하여 조인 할 수 있습니다.

SELECT mgr.id AS manager_id, 
    mgr.employee_name AS manager_name, 
    mgr.hire_date AS manager_hire_date, 
    e1.id AS emp1_id, 
    e1.employee_name AS emp1_name, 
    e1.hire_date AS emp1_hire_date, 
    e2.id AS emp2_id, 
    e2.employee_name AS emp2_name, 
    e2.hire_date AS emp2_hire_date, 
    e3.id AS emp3_id, 
    e3.employee_name AS emp3_name, 
    e3.hire_date AS emp3_hire_date 
FROM Employees mgr 
INNER JOIN Emp_Managed em 
    ON em.mgr_id = mgr.id 
LEFT OUTER JOIN Employees e1 
    ON e1.id = em.emp1 
LEFT OUTER JOIN Employees e2 
    ON e2.id = em.emp2 
LEFT OUTER JOIN Employees e3 
    ON e3.id = em.emp3 
WHERE mgr.id = 1 

직원이 LEFT OUTER JOIN을 사용하여 해당 필드를 null로 허용 한 경우를 선택했습니다.

반복 그룹이있어 Emp_Managed에있는 스키마가 비정규 화되어 있으므로 쉽게 수행 할 수 있습니다. 일반적으로 이런 일은 재귀 쿼리를 필요로하는 계층 적 구조로 표현되지만 구조가 그렇게 비슷하지는 않습니다. 관리자, 관리자가 관리하는 모든 직원, 그리고 모든 직원이 해당 직원에 의해 관리되기를 원하는 상황이 발생하면 상당히 복잡해집니다.

0

그런 것을 원하십니까?

select E.employee_name,E2.employee_name,E3.employee_name,E4.employee_name from Emp_Managed EM 
inner join employees E ON EM.mgr_id = E.id 
inner join employees E2 ON EM.emp1 = E2.id 
inner join employees E3 ON EM.emp2 = E3.id 
inner join employees E4 ON EM.emp3 = E4.id