-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
선생님 코드 중에 궁금한 것이 있습니다.
21.10.22 23:20 작성 조회수 90
2
문제 풀이중 HackerRank의 New Companies 문제에 대한 질문입니다 선생님 께서 작성하신 코드를 보고 혹시 left join의 on 자리에 모든 테이블에 공통되는 칼럼인 company_code로 바꿔도 같은 결과가 나오지 않을까라는 생각에 해봤더니 같은 값이 나오는 것 같았어요
<선생님의 코드> (저랑 다른부분만)
left join lead_manager lm on c.company_code = lm.company_code
left join senior_manager sm on lm.lead_manager_code = sm.lead_manager_code
left join manager m on sm.senior_manager_code = m.senior_manager_code
left join employee e on m.manager_code = e.manager_code
group by c.company_code,c.founder
order by c.company_code;
<저의 코드>
from company c
left join lead_manager lm on c.company_code = lm.company_code
left join senior_manager sm on lm.company_code = sm.company_code
left join manager m on sm.company_code = m.company_code
left join employee e on m.company_code= e.company_code
궁금한점
굳이 on에 들어갈 공통 칼럼을 다르게 해주신 이유가 있나요? 이번에 운이 좋아서 값이 나온거지 저 처럼 저렇게 1개로 다 넣으면(모든 테이블에 공통으로 존재하는 칼럼이 1개 있을 경우) 원래 안되는건가요?
답변을 작성해보세요.
1
지식공유자 J
지식공유자2021.11.12
구하려는 값이 무엇이냐에 따라 조인의 기준이 되는 컬럼도 달라질 수 있습니다.
이 문제는 각 직급마다 유니크한 값 개수를 구하는 것이므로, 작성해 주신 쿼리처럼 모든 조인에 company_code 컬럼을 사용하셔도 문제 없습니다.
다만, 효율성의 측면에서 권장하지는 않습니다.
Senior_Manager Table:
Manager Table:
위 두 테이블을 LEFT JOIN 할 때 company_code 컬럼을 기준으로 하면,
senior_manager_code = 'SM2'인 데이터에도 'SM1'일 때의 manager_code가 동일하게 들어가면서 더 큰 테이블이 생성되기 때문입니다.
또한, 만약 이 문제에서 요구하는 바가 'SM2가 관리하는 manager의 코드를 출력'과 같은 것이었다면 잘못된 답을 도출하게 됩니다.
답변 1