[SQL] 룸 예약 쿼리
SQL룸 예약 쿼리
나는 테이블에서 availables의 객실을 얻을 수있는 SQL을 작성하는 문제가있다.
내 테이블 구조는 다음과 같다.
Table Booking
ID | START_DATE | END_DATE
Table BookingRoom (Intermediate Table)
ID | BOOKING_ID |ROOM_ID
방은 많은 예약에 링크 될 수 있으며, 예약은 많은 객실을 포함 할 수 있습니다
Table Room
Contains the ID room
이 시도했지만 comparaison가 첫 번째 예약 ID로 표시했습니다 될 것입니다 룸은 별도의 날짜에서 2 명 differents의 예약에 연결되어있는 경우 probleme가있다
SELECT DISTINCT r.ID FROM room AS r ,booking AS b,bookingroom AS br
WHERE r.ID = br.ID_ROOM
AND b.ID = br.ID_BOOKING
AND (
b.END_DATE < '05/14/2013'
OR b.START_DATE > '05/15/2013'
)
누군가의 도움이 내게는 체크인 및 체크 아웃 날짜 사이에 이용 가능한 객실을 얻을 수있는 SQL을 쓸 수 있습니다.
해결법
-
==============================
1.당신이 원하는 모든 원하는 날짜, 다음과 같은 힘 작업과 같은 무언가의 전체 범위에 해당하는 객실의 목록입니다 경우 :
당신이 원하는 모든 원하는 날짜, 다음과 같은 힘 작업과 같은 무언가의 전체 범위에 해당하는 객실의 목록입니다 경우 :
Select Room.Id From Room Where Room.Id Not In ( Select RoomId From BookingRoom Join Booking On Booking.Id = BookingRoom.BookingId Where Booking.StartDate <= 'DesiredEndDate' And Booking.EndDate >= 'DesiredStartDate' ) Order By Room.Id
그래서, 원래의 예를 사용하여, 우리가 얻을 수 있습니다 :
Select Room.Id From Room Where Room.Id Not In ( Select RoomId From BookingRoom Join Booking On Booking.Id = BookingRoom.BookingId Where Booking.StartDate <= '2013-05-15' And Booking.EndDate >= '2013-05-14' ) Order By Room.Id
-
==============================
2.당신은 "일 X에 만든 모든 예약"에 대한 명확한 레코드를 정의하고 말했다 하루 동안 예약을하지 않는 객실을 검색하기 위해 외부 조인을 사용하는 것이 좋습니다.
당신은 "일 X에 만든 모든 예약"에 대한 명확한 레코드를 정의하고 말했다 하루 동안 예약을하지 않는 객실을 검색하기 위해 외부 조인을 사용하는 것이 좋습니다.
SET @myDate = #someDay# SELECT R.ID FROM Room R WHERE R.ID NOT IN ( SELECT BR.ROOM_ID FROM BookingRoom BR INNER JOIN Booking B ON BR.Booking_ID = B.ID WHERE @myDate BETWEEN B.start_date and B.end_date )
편집하다:
당신이 예약시 열려있는 모든 객실을 원하기 때문에, 당신은 더 복잡한 쿼리를 수행해야합니다. 나는 당신이 이미 날짜 기반의 다 대다 쿼리 피타이다하고 있기 때문에, 질문로드 외부의 날짜를 가정합니다.
SET @dateStart = #Start# SET @dateEnd = #End# SELECT R.ID FROM Room R WHERE R.ID NOT IN ( SELECT BR.ROOM_ID FROM BookingRoom BR INNER JOIN Booking B ON BR.Booking_ID = B.ID WHERE B.start_date BETWEEN @dateStart AND @dateEnd AND B.end_date BETWEEN @dateStart AND @dateEnd )
from https://stackoverflow.com/questions/16554649/room-booking-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 피벗 연산자 (0) | 2020.06.18 |
---|---|
[SQL] 심지어 테이블에 존재하지 않는 IN 목록의 요소에 대한 결과를 반환 (0) | 2020.06.18 |
[SQL] 어떻게 CodeIgniter의의 활동 기록에이 SQL을 다시 작성할 수 있습니까? (0) | 2020.06.18 |
[SQL] 날짜 비교 비정상적인 결과를 반환 - SQL 오라클 (0) | 2020.06.18 |
[SQL] 이동 세포는 왼쪽이 null이 포함 된 경우 SQL에서 왼쪽과 오른쪽 값을 포함 (0) | 2020.06.18 |