인프런 커뮤니티 질문&답변
서브쿼리를 JOIN으로 바꾸기
작성
·
119
·
수정됨
0
안녕하세요! SUBQUERY 이해 (업데이트) 강의에서 예2의 비교 부분의 쿼리문을 JOIN으로 바꿔서 표현해보려고 하는데 실행 결과 category_id가 1부터 전부 나옵니다. 어떻게 해야 5('Comedy')보다 큰 것만 추출할 수 있을까요?
- pdf파일 7page 

JOIN으로 바꿔서 표현해본 쿼리문

실행 결과

답변 1
0
안녕하세요. 답변 도우미입니다.
현재 JOIN 쿼리에서 WHERE 조건이 잘못되어 원하는 결과가 나오지 않고 있습니다.
기존 WHERE 절 조건에서는 fc.category_id > (c.name = 'Comedy')로 되어 있는데, 이 조건은 SQL에서 논리적으로 잘못된 방식입니다. (c.name = 'Comedy')는 불리언 값으로 처리되어, 모든 category_id에 대해 불리언 비교가 이루어지기 때문에 올바른 필터링이 되지 않습니다.
해결 방법
JOIN을 사용하면서, Comedy라는 이름을 가진 category_id보다 큰 category_id만 선택하려면, 먼저 Comedy의 category_id를 가져와서 그 값보다 큰 category_id를 필터링해야 합니다. 이를 위해서는 서브쿼리로 Comedy의 category_id를 가져와 직접 비교하는 방식을 사용해야 합니다.
수정된 쿼리 예시
아래와 같이 Comedy의 category_id를 구하는 서브쿼리를 WHERE 절에서 활용하면 원하는 결과를 얻을 수 있습니다.
SELECT fc.category_id, COUNT(*) AS film_count
FROM film_category fc
JOIN category c ON fc.category_id = c.category_id
WHERE fc.category_id > (
    SELECT category_id FROM category WHERE name = 'Comedy'
)
GROUP BY fc.category_id;쿼리 설명
- JOIN을 통해- film_category테이블과- category테이블을 연결합니다.
- WHERE조건에서- fc.category_id가- Comedy의- category_id보다 큰 항목만 선택하도록 합니다.
- GROUP BY로- category_id별- COUNT를 수행하여 결과를 집계합니다.
예상 결과
위와 같은 쿼리를 실행하면 Comedy 카테고리보다 큰 category_id에 해당하는 영화 개수(film_count)를 정확히 얻을 수 있습니다.
감사합니다. 잔재미코딩 드림






