예약 테이블입니다.
room_number: string
start_date: datetime
end_date: datetime
로 지정되어있습니다.
몇번 룸의 start_date부터 end_date까지 예약 데이터가 저장됩니다.
예약 된 것을 찾는 조건은 start_date <= 종료일 and end_date >= 시작일 하면 되는데
시작일, 종료일 범위 날짜로 예약 가능한 방을 찾는 날짜 조건은 어떻게 주어야 할까요?
오전 퇴실, 오후 입실 한다면?
이전 예약 종료일과 이후 예약 시작일은 겹칠 수 있을 듯 합니다.
따라서 조건에서 등호(=)는 빠져야 할 것 같구요.
전체 룸번호에서 예약된 룸번호를 빼면 되겟네요.
SELECT room_number FROM 룸_테이블 MINUS SELECT room_number FROM 예약_테이블 WHERE start_date < 종료일 AND end_date > 시작일 ;
답변 감사합니다 :)
mysql에서는 not exists해야 하는거죠?
not exists하지 않고 할수 있는 방법이 있을까요?
MySQL 에서는 MINUS 가 안되는 군요
-- NOT EXISTS --
SELECT room_number
FROM 룸_테이블 m
WHERE NOT EXISTS (SELECT 1
FROM 예약_테이블
WHERE start_date < 종료일
AND end_date > 시작일
AND room_number = m.room_number
)
;
-- NOT IN --
SELECT room_number
FROM 룸_테이블
WHERE room_number NOT IN (SELECT room_number
FROM 예약_테이블
WHERE start_date < 종료일
AND end_date > 시작일
)
;
-- OUTER JOIN & IS NULL --
SELECT m.room_number
FROM 룸_테이블 m
LEFT OUTER JOIN 예약_테이블 s
ON s.start_date < 종료일
AND s.end_date > 시작일
AND s.room_number = m.room_number
WHERE s.room_number IS NULL
;