SQL 문제풀이

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

냄비짱 2023. 8. 6. 01:59
728x90

❓ Question

❗ Answer

# JOIN KEY : p.pt_no = a.pt_no / a.mddr_id = d.dr_id
# 문제 조건
# 1) 2022-04-13 : a.apnt_ymd LIKE '2022-04-13%'
# 2) 취소되지않은 : a.apnt_cncl_yn = 'N'
# 3) 흉부외과(CS) : a.mcdp_cd = 'CS'
# 4) 출력 : a.apnt_no 진료예약번호, p.pt_name 환자이름, p.pt_no 환자번호,
#          a.mcdp_cd 진료과코드, d.dr_name 의사이름, a.apnt_ymd 진료예약일시
SELECT ad.apnt_no 진료예약번호, p.pt_name 환자이름, p.pt_no 환자번호,
       ad.mcdp_cd 진료과코드, ad.dr_name 의사이름, ad.apnt_ymd 진료예약일시
  FROM patient p
  INNER JOIN (SELECT a.apnt_ymd, a.apnt_no, a.pt_no, a.mcdp_cd,
                     a.apnt_cncl_yn, a.apnt_cncl_ymd, d.dr_name
                FROM appointment a
                INNER JOIN doctor d
                        ON a.mddr_id = d.dr_id) ad
          ON p.pt_no = ad.pt_no
  WHERE ad.apnt_ymd LIKE '2022-04-13%' AND
        ad.apnt_cncl_yn = 'N' AND
        ad.mcdp_cd = 'CS'
  ORDER BY 진료예약일시;

📌 Discussion

  • 조건이 많은 경우에는 정리를 해놓고 문제를 푸는 것이 수월
  • sub-query에서 두 테이블을 우선 join 후 main-query에서 한번 더 join을 실행
  • sub-query에서는 모두 불러온 후 WHERE절에서 모든 필터링 진행