WITH A  AS(
SELECT UB.BOARD_ID, 
UB.WRITER_ID AS UB_WRITER,
TITLE,
UB.CONTENTS AS UB_CONTENTS, 
PRICE, 
UB.CREATED_DATE AS UB_CREATED_DATE, 
STATUS, 
VIEWS, 

REPLY_ID, 
UR.WRITER_ID AS UR_WRITER,
UR.CONTENTS  AS UR_CONTENTS,
UR.CREATED_DATE AS UR_CREATED_DATE

FROM USED_GOODS_BOARD UB RIGHT JOIN USED_GOODS_REPLY UR ON (UB.BOARD_ID = UR.BOARD_ID)
ORDER BY BOARD_ID
)

SELECT TITLE, BOARD_ID, REPLY_ID, UR_WRITER AS WRITER_ID, UR_CONTENTS AS CONTENTS, 
TO_CHAR(UR_CREATED_DATE, 'YYYY-MM-DD')  AS CREATED_DATE
FROM A
WHERE EXTRACT(YEAR FROM UB_CREATED_DATE) = 2022 
AND EXTRACT(MONTH FROM UB_CREATED_DATE) = 10
ORDER BY UR_CREATED_DATE, TITLE
;


<내용 정리>

 

 

1) TABLE1 LEFT JOIN  TABLE2 ON (TABLE1.~ = TABLE2.~)

-> OUTER JOIN을 하면 기준이 되는 테이블(LEFT면 LEFT에 적히는 TABLE1)의 값은 모두 출력. 

-> 이때, RIGHT(TABLE2)의 값이 LEFT의 특정 행에 안 붙을 수 있음. 이때는 NULL값으로 처리되는 듯?

 

 

2) WITH A  AS (SUB-Q)

 

3) TO_DATE

-> TO_DATE하면 무조건 뒤에 시간표시가 같이 따라온다. 

-> 따라서 'YYYY-MM-DD'형태로 하고 싶으면 TO_CHAR( ) 형태로 바꿔줘야 한다.

 

4) EXTRACT함수

-> EXTRACT(MONTH(YEAR도 OK) FROM 'DATE 형 열 이름') = 숫자

-> 좀 더 직관적인듯


 

<CHAT GPT가 알려주는 간결한 형태>

 

WITH A AS (
    SELECT 
        UB.BOARD_ID, 
        UB.WRITER_ID AS UB_WRITER,
        TITLE,
        UB.CONTENTS AS UB_CONTENTS, 
        PRICE, 
        UB.CREATED_DATE AS UB_CREATED_DATE, 
        STATUS, 
        VIEWS, 
        REPLY_ID, 
        UR.WRITER_ID AS UR_WRITER,
        UR.CONTENTS  AS UR_CONTENTS,
        UR.CREATED_DATE AS UR_CREATED_DATE
    FROM USED_GOODS_BOARD UB 
    RIGHT JOIN USED_GOODS_REPLY UR ON (UB.BOARD_ID = UR.BOARD_ID)
)

SELECT 
    TITLE, 
    BOARD_ID, 
    REPLY_ID, 
    UR_WRITER AS WRITER_ID, 
    UR_CONTENTS AS CONTENTS, 
    TO_CHAR(UR_CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE
FROM A
WHERE TO_CHAR(UB_CREATED_DATE, 'YYYY-MM') = '2022-10'
ORDER BY UR_CREATED_DATE, TITLE;

 

위의 쿼리에서 변경된 사항은 다음과 같습니다:

  1. WITH 절에 ORDER BY를 제거하여 중복 정렬을 제거합니다.
  2. WHERE 절에서 EXTRACT 함수 대신에 TO_CHAR 함수를 사용하여 년도와 월을 문자열로 변환하고 비교합니다.
  3. WHERE 절에서 UB_CREATED_DATE 대신에 UR_CREATED_DATE를 사용하여 올바른 필드를 참조합니다.

이렇게 수정하면 쿼리가 좀 더 간결해지고 중복을 줄일 수 있습니다.

+ Recent posts