MySQL SELF JOIN

SYhwang·2023년 3월 4일
2

댓글의 댓글 기능을 어떻게 구현할지에 대해 생각해보다 self join의 개념을 알게 되었다.

  • comments 테이블에 comment_id 컬럼을 만들고
  • 대댓글은 db에 저장할 때 참조하는 본 댓글의 id를 comment_id 컬럼에 저장하고,
  • 조회할 때는 comment 테이블에서 self join을 사용한다.

일반적으로 JOIN 은 연관된 테이블간의 정보를 연결하여 조회할 때 사용한다. 그러나 같은 테이블을 참조하는 SELF JOIN도 가능하다고 한다.

SELECT 
	c1.id AS original_id,
    c1.content AS original_content,
    c2.id AS reply_id,
	c2.content AS reply_content
FROM comments c1 
LEFT JOIN comments c2 
ON c1.id = c2.comment_id;

댓글 하나에 댓글이 여러 개 달릴 수 있다면 group by와 json_arrayagg 를 사용하여 데이터를 묶어서 조회하는 방법도 생각할 수 있겠다.

SELECT 
	c1.id AS original_id,
    c1.user_id AS original_user_id,
    c1.content AS original_content,
    JSON_ARRAYAGG (
    	JSON_OBJECT(
   			"reply_id", c2.id,
            "reply_user_id", c2.user_id,
			"reply_content", c2.content
         )
    ) AS reply
FROM comments c1 
JOIN comments c2 ON c1.id = c2.comment_id;
GROUP BY c1.id

0개의 댓글