USED_GOODS_BOARD와USED_GOODS_REPLY테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.
# 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회
# 댓글 작성일을 기준으로 오름차순 정렬
# 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬
SELECT B.TITLE,
B.BOARD_ID,
R.REPLY_ID,
R.WRITER_ID,
R.CONTENTS,
DATE_FORMAT(R.CREATED_DATE, "%Y-%m-%d") AS CREATED_DATE
FROM USED_GOODS_BOARD AS B
JOIN USED_GOODS_REPLY AS R
ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE LIKE '2022-10%'
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;
처음에는 USED_GOODS_BOARD을 기준으로 LEFT JOIN을 했었다. 왜냐하면 게시글은 있어도 댓글은 없을 수 있다고 생각했기 때문이다. 그런데 답이 계속 틀렸다고 해서 어디서 틀렸는지 찾느라 헤맸다. 다시 코드를 보니 ORDER BY문에서 가장 첫번째인 정렬 기준이 USED_GOODS_REPLY에 존재하는 CREATED_DATE인데 만약 LEFT JOIN했다면 이 부분에 NULL값이 생기는 행이 존재하게 되면서 제대로 된 결과를 보여주지 못했을 것이다. 다음부터는 JOIN을 통해 나타내는 컬럼뿐만 아니라 정렬기준도 함께 파악해 어떤 조인을 사용해야하는지 판단해야겠다.
추가적으로 WHERE 절에서 날짜 조건을 사용하는 다른방법들도 정리해 보았다.
# 방법1
WHERE EXTRACT(YEAR_MONTH FROM B.CREATED_DATE) = 202210
# 방법2
WHERE YEAR(b.CREATED_DATE) = 2022 AND MONTH(b.CREATED_DATE) = 10
# 방법3
WHERE DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = '2022-10'