코딩테스트
대여 기록이 존재하는 자동차 리스트 구하기
코앤미
2023. 7. 20. 15:09
https://school.programmers.co.kr/learn/courses/30/lessons/157341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
쉬운 문제이지만, join 개념이 잡히지 않았다면 헷갈릴 수 있어 가지고 와봤다.
우선, CAR_RENTAL_COMPANY_RENTAL_HISTORY(이하 history) join CAR_RENTAL_COMPANY_CAR (이하 car)
테이블은 history 테이블이 car테이블의 PK를 FK로 가지고 있기에, 이를 가지고 join해야하기에 기본조건을 추가해야한다.
가끔 무의식 적으로 join 이 알아서 PK == FK 로 join해준다고 생각하는 실수를 해서 강조해보았다.
또한, car과 history 테이블을 join 시, car 테이블은 car_id를 PK로 가지기에 중복된 car_id가 없지만, history 테이블은 car_Id 가 중복 될 수 있기에, 둘을 join 시 중복된 car_id 가 나올 수 있다.
그러렇기에 distinct 조건을 걸어줘야한다.
# car_id가 join 과정에서 중복될 수 있다.
#( 같은 car_id여도, history테이블에 해당 key를 FK로 가진 튜플이 다수 존재하기에)
select distinct c.car_id
from CAR_RENTAL_COMPANY_RENTAL_HISTORY as ch join CAR_RENTAL_COMPANY_CAR as c
on c.car_id=ch.car_id # 주요 조인 조건(PK = FK)
and date_format(ch.start_date,'%m')= 10 and c.car_type="세단"
order by c.car_id desc