SQL 코드카타 177번
3개 테이블을 조인하는 문제.
'친구의 급여가 내 급여보다 높은' 사람의 이름을 뽑으면 된다.
먼저 내 급여를 알기 위해
Students 테이블과 Packages 테이블을 조인한다.
select s.name
from Students s
left join Packages p on s.id = p.id
그리고 각각의 학생에 대해 누가 친구인지 알아야 하므로
Friends 테이블을 학생id에 대해 left join한다.
select s.name
from Students s
left join Packages p on s.id = p.id
left join Friends f on s.id = f.id
이제 친구의 급여와 내 급여를 비교하는 조건이 들어가야 하므로
Packages 테이블을 한 번 더 left join해 준다.
이 때의 조건은 (친구의 급여를 알아야 하므로) friends.id = p2.id인 점에 주의.
select s.name
from Students s
left join Packages p on s.id = p.id
left join Friends f on s.id = f.id
left join Packages p2 on f.friend_id = p2.id
이제 조인은 모두 끝났으니
내 급여보다 친구의 급여가 더 크다는 조건을 where절에 명시하고
친구의 급여 순으로 정렬해 주면 끝.
아래는 정답 쿼리.
SELECT s.name
FROM students s
LEFT JOIN packages p
ON s.id = p.id
LEFT JOIN friends f
ON s.id = f.id
LEFT JOIN packages p2
ON f.friend_id = p2.id
WHERE p2.salary > p.salary
ORDER BY p2.salary