SQL,选择与您找到的实体不相等的实体

时间:2013-11-05 09:01:18

标签: sql oracle

SELECT HOTEL.ROOM
FROM HOTEL
  LEFT OUTER JOIN BOOKED
 ON BOOKED.ROOM = HOTEL.ROOM

 WHERE
    TO_DATE('&STARTDATE','DD-MM-YY') BETWEEN BOOKED.ARRIVALDATE 
 AND BOOKED.ARRIVALDATE + &NIGHTS

我需要帮助,我需要搜索预订的房间并返回可用的房间。 基本上用户在查询中输入日期,以及他住的晚数。这是在BOOKED表中查找的,如果日期等于那意味着房间被预订,它不应该从HOTEL.ROOM表中选择那个。 编辑:将RIGHT OUTER JOIN改为LEFT OUTER JOIN,只是意识到它是从错误的表中选择数据

1 个答案:

答案 0 :(得分:0)

您日期范围内的预订:

SELECT *
FROM   BOOKED
WHERE  TO_DATE('&STARTDATE','DD-MM-YY') BETWEEN ARRIVALDATE AND ARRIVALDATE + &NIGHTS

扩展以查找此列表中的HOTEL个房间,即已预订:

SELECT ROOM
FROM   HOTEL
WHERE  EXISTS (
         SELECT *
         FROM   BOOKED
         WHERE  TO_DATE('&STARTDATE','DD-MM-YY') BETWEEN ARRIVALDATE AND ARRIVALDATE + &NIGHTS
         AND    ROOM = HOTEL.ROOM
       )

那些不在此列表中的人,即没有预订:

SELECT ROOM
FROM   HOTEL
WHERE  NOT EXISTS (
         SELECT *
         FROM   BOOKED
         WHERE  TO_DATE('&STARTDATE','DD-MM-YY') BETWEEN ARRIVALDATE AND ARRIVALDATE + &NIGHTS
         AND    ROOM = HOTEL.ROOM
       )