티스토리 뷰

항상 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;

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함