티스토리 뷰
항상 inner join만 해도 문제가 없었음. 왜냐하면 양쪽에 데이터가 있는 경우만 다뤘기 때문
SELECT
V.*,
count(c.id) AS comment_count
FROM
(
SELECT
e.product_id,
e.id AS episode_id,
@rownum :=@rownum+1 AS episode_no,
p.title,
e.create_date
FROM episode_info e
INNER JOIN product p
ON p.id = e.product_id ,
(SELECT @rownum := 0) r
WHERE e.product_id = :productId
) V
INNER JOIN episode_comment c
ON v.episode_id = c.episode_id
WHERE episode_no = 52
GROUP BY c.episode_id;
서브쿼리로 rowNum을 구한 후에 INNER JOIN 하여 코멘트를 count를 하는 쿼리문
1. c 테이블에 episode_id 가 있는 경우: 문제 없었음
2. c 테이블에 episode_id가 없는 경우: count만 0이 되어야 하는데 전체 결과가 null이 되는 문제
문제해결
1. INNER JOIN 하는 테이블에 데이터가 없는 경우엔 LEFT JOIN을 쓴다
2. c.episode_id가 존재하지 않으므로 GROUP BY는 v.episode_id로 변경
SELECT
V.*,
count(c.id) AS comment_count
FROM
(
SELECT
e.product_id,
e.id AS episode_id,
@rownum :=@rownum+1 AS episode_no,
p.title,
e.create_date
FROM episode_info e
INNER JOIN product p
ON p.id = e.product_id ,
(SELECT @rownum := 0) r
WHERE e.product_id = 1
) V
LEFT JOIN episode_comment c
ON v.episode_id = c.episode_id
WHERE episode_no = 50
GROUP BY v.episode_id;