2014-06-18 5 views
0

누군가가 내게 약간의 도움을 줄 수 있기를 바랍니다 ...날짜 사이의 가능한 객실을 표시 하시겠습니까? SQL

호텔 예약 프로그램을 프로그래밍하고 있는데 두 곳의 주어진 날짜 사이에 사용 가능한 객실 목록을 볼 수 있어야합니다. 나는 예약의 도착 날짜 이후에 도착 날짜로 검색하면 객실이 여전히 사용 가능한 것으로 표시된다는 점에서 문제가 발생합니다 ...

내 데이터베이스 호출은 다음과 같습니다.

String SQLString = "select roomnumber, roomtypeid from rooms " 
     + "where roomnumber not in " 
     + "(select roomnumber from booking " 
     + "where arrival between to_date(?, 'yyyy-mm-dd') " 
     + "and to_date(?, 'yyyy-mm-dd')) and roomtypeid = ? order by roomnumber"; 

나는 여러 가지 SQL 문자열 조합을 시도했지만 아무 도움이되지 않습니다. 아무도 내게 좋은 힌트를 줄 수 있니?

CREATE TABLE BOOKING(
ARRIVAL    DATE , 
DEPARTURE   DATE, 
RESERVATIONSNUMBER INTEGER NOT NULL PRIMARY KEY, 
ROOMNUMBER   INTEGER, 
PAID    INTEGER, 
CUSTOMERID INTEGER, 
NUMBEROFGUESTS INTEGER, 
CONSTRAINT BOFK FOREIGN KEY(ROOMNUMBER) REFERENCES ROOMS(ROOMNUMBER), 
CONSTRAINT CUIDFK FOREIGN KEY(CUSTOMERID) REFERENCES CUSTOMER(CUSTOMERID)); 
+0

데이터베이스에 대한 정보를 좀 더 제공 할 수 있습니까? 예약 테이블은 어떻게 정의됩니까? – Icewind

+0

일반 SQL을 추가 할 수 있습니까? –

+0

예약 테이블에 SQL을 추가합니다. – Englund0110

답변

1

는 예약을 중복 찾는 방법이다. 같은 날을 문제가 아닌 것으로 간주하면 < = 및> =을 < 및>로 변경할 수 있습니다.

select roomnumber, roomtypeid 
from rooms 
where roomnumber not in 
(
    select roomnumber 
    from booking 
    where departure >= to_date(? /* desired arrival date */, 'yyyy-mm-dd') 
    and arrival <= to_date(? /* desired departure date */, 'yyyy-mm-dd') 
) 
and roomtypeid = ? /* desired room type */ 
order by roomnumber; 
+0

OP는 무료 객실을 요청할 때 점유 된 룸 목록을 제공합니다 (확인, 단지 논리적 인 부정이나 ...). 그러나 당신은 ** ** 문제를 해결할 때 난제를 해결합니다. –

+0

이것이 도움이되었습니다! 고마워요! – Englund0110

0

유일한 문제는 모든 날짜 필드를 날짜 형식으로 변환하고 동일한 것으로 확인하는 것입니다.

0

그것은 다음과 같이 보일 것이다 - 여기

SELECT * 
FROM rooms r 
WHERE NOT EXISTS (SELECT 1 
        FROM booking b 
        WHERE (?arrival_date_parameter BETWEEN arrival AND departure 
        OR arrival BETWEEN ?arrival_date_parameter AND ?departure_date_parameter) 
        AND r.roomnumber = b.roomnumber) 
    AND roomtypeid = ? 
ORDER BY roomnumber 
+0

나는 이것을 시도 할 것이다. 그러나 r.roomnumber와 b.roomnumber는 무엇입니까? – Englund0110

+1

r 및 b는 별칭입니다. – Genzotto

관련 문제