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절에서 모든 필터링 진행