해결된 질문
작성
·
119
·
수정됨
답변 1
2
승렬님 안녕하세요:)
leetcode 문제: https://leetcode.com/problems/employees-whose-manager-left-the-company/description/
먼저, 이해하기 쉽게 Employees 테이블을 전체 조회하면 아래처럼 나옵니다.
그 다음에 서브쿼리를 쓰지 않고 바로 not in으로 비교하면, row별 manager_id와 employee_id를 비교하게 됩니다.
이건 마치 manager_id와 employee_id가 서로 다른 row를 조회하는 셈이 되는데요.
전체 Employees 테이블 조회했을 때 나왔던 manager_id=null이 여기서 나오지 않은 이유는,
null은 특정 값과 비교자체가 안되기 때문입니다. (숫자 '0'이 '4'와 다르다라고 말할 수는 있어도, '없다'(=null)과 '4'와 같다, 다르다라고 비교 자체가 성립되지 않습니다)
하지만 이렇게 서브쿼리를 쓴다면,
이제 더이상 row별로 manager_id와 employee_id가 다른지 비교하는게 아니라, manager_id가 (3, 12, 13, 1, 9, 11)이 아니기만 하면 된다라는 조건으로 바뀝니다. 그리고 이게 실제 문제를 풀려고 우리가 의도했던 로직이 됩니다.
select employee_id
from Employees
where salary < 30000
and manager_id not in
(
select employee_id
from Employees
)
order by employee_id;
읽으시고 추가 궁금한 부분 있으시면, 언제든지 질문 주세요:)