언어

full outer join 불가능

땅호720 2024. 6. 10. 13:49

new companies

/*
select e.company_code, c.founder,
        count(distinct lead_manager_code),
        count(distinct senior_manager_code),
        count(distinct manager_code),
        count(distinct employee_code)
from employee e
left join company c
on e.company_code=c.company_code
group by company_code, founder
order by company_code
*/

-- company: 100
-- lead_manager_code: 100
-- senior_manager_code: 144
-- manager_code: 284
/* <employee table>
company: 100
lead_manager: 100
senior_manager: 144
manager: 284
*/

select c.company_code, c.founder,
        count(distinct lm.lead_manager_code),
        count(distinct sm.senior_manager_code),
        count(distinct m.manager_code),
        count(distinct e.employee_code)
from company c
        left outer join lead_manager lm on lm.company_code=c.company_code
        left outer join senior_manager sm on lm.lead_manager_code = sm.lead_manager_code
        left outer join manager m on sm.senior_manager_code = m.senior_manager_code
        left outer join employee e on m.manager_code = e.manager_code
group by company_code, founder
order by company_code
--order by cast(replace(c.company_code, 'C', '') as SIGNED)

문제에서 처리하는 데이터는 각 테이블과 employee 테이블에서의 코드 수가 일치해서 첫 번째 주석 쿼리도 정답 처리가 된다.

하지만, 문제 속 예시에서는 sm2 아래로는 지정된 매니저 및 직원이 없다. 그리고 employee 테이블에서는 결측치가 없이 직원 중심으로 테이블이 구성되어 있다.

 

이러한 케이스를 해결하기 위해서는, 모든 테이블을 조인해줘야 한다

그런데 mysql에 full outer join이 없어서 (bigquery는 가능)

left outer join으로 해줘야 했다