요구 사항으로

한 페이지에 게시글을 10개 가져오는 데

댓글은 최신순 3개정도만 미리보기로 가져온다고 생각해봐

List 게시글 = select * from 게시글 join 댓글 limit 0, 10

이러면 페이징이 조인 결과에 따라

게시글1 - 댓글1
게시글1 - 댓글2
게시글1 - 댓글3
이게 행 3개를 잡아 먹음

쿼리 결과가 게시글이 10개가 안나옴

요구사항에 맞지않음

이걸 피하려고

List 게시글 = select * 게시글 limit 0,10
for(a : 게시글){
List 댓글 = select 댓글 where 댓글.게시글=a limit 0,3
a.set(댓글)
}

이렇게 짜면 N+1 터지는거지

근데 이게 직관적이니깐 이렇게 짤 수도 있는거임

쿼리 하나로 게시글10개+각 게시글당 댓글 최신 3개(없으면 댓글쪽은 null)까지 가능?



밑에 다른 분 제시한 로우 넘버 기반 해결법 첨부함