[프로그래머스] 취소되지 않은 진료 예약 조회하기_MySQL

2023. 3. 18. 16:06DataBase/SQL Query Problem

728x90
반응형
SMALL

APPOINTMENT 테이블에 대해 PATIENT 테이블과 DOCTOR 테이블을 LEFT JOIN하면 되는 문제였다.

이런 생각을 떠올리기는 되게 쉬웠는데 이를 구현하는게 쪼~끔 까다로웠다.

 

세개의 테이블을 한 번에 조인하려고 했는데 잘 안됐다.

그래서 이번에도 WITH 절을 이용해 PATINET 테이블과 LEFT JOIN을 한 번 진행하고, 이후에 한 번 더 DOCTOR 테이블과 조인했다.

 

그런데 뭔가 WITH 절을 남발하는게 무조건 좋은가? 라는 생각이 들었다. 그래서 다중 조인하는 방법을 찾아봤다.

역시 있었다.

생각보다 어렵지 않아서 금방 쿼리를 작성할 수 있었다.

 


WITH 절을 이용한 정답

WITH AP AS (
    SELECT
        A.*, P.PT_NAME
    FROM
        APPOINTMENT A LEFT JOIN PATIENT P
    ON
        A.PT_NO = P.PT_NO
    WHERE
        A.MCDP_CD LIKE 'CS'
        AND A.APNT_YMD LIKE '2022-04-13%'
        AND A.APNT_CNCL_YN LIKE 'N'
)

SELECT
    AP.APNT_NO, AP.PT_NAME, AP.PT_NO, AP.MCDP_CD, D.DR_NAME, AP.APNT_YMD
FROM
    AP LEFT JOIN DOCTOR D
ON
    AP.MDDR_ID = D.DR_ID
ORDER BY
    AP.APNT_YMD ASC;

 

다중 LEFT JOIN을 이용한 정답

SELECT
    A.APNT_NO, P.PT_NAME, P.PT_NO, A.MCDP_CD, D.DR_NAME, A.APNT_YMD
FROM
    APPOINTMENT A
    LEFT JOIN PATIENT P
        ON A.PT_NO = P.PT_NO
    LEFT JOIN DOCTOR D
        ON A.MDDR_ID = D.DR_ID
WHERE
    A.MCDP_CD LIKE 'CS'
    AND A.APNT_YMD LIKE '2022-04-13%'
    AND A.APNT_CNCL_YN LIKE 'N'
ORDER BY
    A.APNT_YMD ASC
728x90
반응형
LIST