이번 문제는 보자마자 조인을 떠올려서 쉽게 풀 수 있던 문제였다. 두 테이블이 겹치는 열이 많아 각 변수 별로 어떤 테이블에서 가져와 주어야 하는지 약간 햇갈렸는데 단순히 내가 문제를 잘 읽지 않은 탓이다.. 반성!!
아무튼 내가 푼 정답은 다음과 같다.
정답
-- 코드를 입력하세요
SELECT TITLE,
UGR.BOARD_ID,
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 YEAR(UGB.CREATED_DATE) = 2022 and MONTH(UGB.CREATED_DATE) = 10
ORDER BY 6, 1;
풀이
BOARD_ID를 기준으로 INNER JOIN을 이용하였고 WHERE 절의 조건의 경우는 그냥 YEAR과 MONTH 함수로 조건을 걸어줬다.
조인만 할 줄안 다면 쉽게 풀 수 있는 문제였다. 어떤 분은 WHERE 절에다가 DATE_FORMAT 함수를 활용해 조건을 걸었는데 이는 날짜를 문자열로 형식화하고 문자열 비교를 수행하는 것으로 개인적으로 내가 쓴 답보다는 최적화 측면에서 효율이 떨어진다고 생각한다. 일단 복수 답안은 맞으니 아래에 첨부하겠다.
SELECT TITLE,
UGR.BOARD_ID,
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') LIKE '2022-10%'
ORDER BY 6, 1;