https://school.programmers.co.kr/learn/courses/30/lessons/164673
코드설명
SELECT + INNER JOIN + DATE_FORMAT 를 활용하는 문제입니다.
- USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블을 INNER JOIN을 사용하여 "BOARD_ID"를 기준으로 연결합니다.
- 연결된 결과에서 USED_GOODS_BOARD의 "CREATED_DATE"를 '%Y-%m' 형식으로 포맷하여 '2022-10'과 비교합니다.
- WHERE 절을 사용하여 "CREATED_DATE"가 '2022-10'인 행만 선택합니다.
- 선택된 행에서 필요한 열을 추출하여 출력합니다: "TITLE", "BOARD_ID", "REPLY_ID", "WRITER_ID", "CONTENTS", "CREATED_DATE" (포맷된 날짜).
- 마지막으로, ORDER BY 절을 사용하여 "UGR.CREATED_DATE"를 오름차순으로 정렬하고, 그 후 "UGB.TITLE"을 오름차순으로 정렬합니다.
문제에서 처음에는 LEFT JOIN을 사용했었는데, 그렇게 할경우 교집합에 해당하지 않더라도 모두 나오므로 불필요 로직이 추가됩니다. INNER JOIN을 활용합니다.
또한 문제에서 놓치지 않아야하는 점은, 게시글의 생성일자가 '2022-10'인 글입니다. 댓글이 아닙니다.
코드
SELECT UGB.TITLE, UGB.BOARD_ID, UGR.REPLY_ID, UGR.WRITER_ID, UGR.CONTENTS, DATE_FORMAT(UGR.CREATED_DATE , '%Y-%m-%d')
FROM USED_GOODS_BOARD AS UGB
INNER JOIN USED_GOODS_REPLY AS UGR
ON UGB.BOARD_ID = UGR.BOARD_ID
WHERE DATE_FORMAT(UGB.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY UGR.CREATED_DATE ASC, UGB.TITLE ASC
SELECT UGB.TITLE AS TITLE, UGB.BOARD_ID AS BOARD_ID, UGR.REPLY_ID AS REPLY_ID, UGR.WRITER_ID AS WRITER_ID, UGR.CONTENTS AS CONTENTS, DATE_FORMAT(UGR.CREATED_DATE,'%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD AS UGB
INNER JOIN USED_GOODS_REPLY AS UGR
ON UGB.BOARD_ID = UGR.BOARD_ID
WHERE DATE_FORMAT(UGB.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY UGR.CREATED_DATE ASC, UGB.TITLE ASC;
-- 게시글 제목을 기준으로 오름차순 정렬하는 것을 놓쳐서, 오류를 찾았습니다.
SELECT UGB.TITLE, UGB.BOARD_ID, UGR.REPLY_ID, UGR.WRITER_ID, UGR.CONTENTS, DATE_FORMAT(UGR.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD AS UGB
INNER JOIN USED_GOODS_REPLY AS UGR
ON UGB.BOARD_ID = UGR.BOARD_ID
WHERE DATE_FORMAT(UGB.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY UGR.CREATED_DATE ASC, UGB.TITLE ASC