【问题标题】:How to get available rooms from derby embedded database如何从 derby 嵌入式数据库中获取可用房间
【发布时间】:2017-04-22 02:21:03
【问题描述】:

我正在构建一个酒店管理系统,但我一直在寻找指定日期的可用房间。我有两张桌子,即客房和预订

Rooms Table
| RoomID | Name | Floor | Bed | Rent | RoomType|

Reservation Table
| ResvID | RoomId | CheckIn | CheckOut | CustomerID |

预订表中的外键是RoomId。

我想要的只是获得可用的房间(在给定日期未预订)。我的应用程序还提供添加新房间的功能。所以仅仅加入预订表并没有给我想要的结果,因为新房间永远不会出现在预订表中。我还想使用 BedType 和 RoomType 进行过滤。我使用了以下查询

 SELECT DISTINCT r.RoomID, r.RoomNo, r.Name, r.Floor, r.RoomType, r.Rent
 FROM hms.rooms r
 JOIN hms.reservation rv
   ON r.RoomID = rv.ROOM_ID
 WHERE (((rv.CHECKIN < ? AND  --Checkin Provided
         rv.CHECKOUT <= ?) OR  --Checkin Provided
         (rv.CHECKIN >= ? AND --Checkout Provided
         rv.CHECKOUT > ?)) AND --Checkout Provided
         rv.CHECKIN <> ? AND rv.CHECKOUT <> ?) AND  -- Checkin/Checkoutprovided
         (r.RoomType = ? AND  --RoomType provided
         r.Bed = ?)  --BedType provided
  UNION
  SELECT RoomID, RoomNo, Name, Floor, RoomType, Rent
  FROM hms.rooms AS r WHERE r.RoomID NOT IN(
  SELECT ROOM_ID FROM hms.reservation) AND
 (r.RoomType = ? AND r.Bed = ?)  --Room?BedType provided

而且这个查询不起作用。它总是显示房间。

编辑:尝试了此代码,但仍显示可用空间

SELECT RoomID, RoomNo, Name, Floor, RoomType, Rent
  FROM hms.rooms r
WHERE r.RoomID NOT IN
 (SELECT ROOM_ID
    FROM hms.reservation rv
  WHERE(
       ((rv.CHECKIN <= ?) AND --in
        (rv.CHECKOUT  > ? AND rv.CHECKOUT < ?)) OR --in/out

        ((rv.CHECKIN < ? AND rv.CHECKIN > ?) AND --out/in
        (rv.CHECKOUT >= ?)) OR --out

        (rv.CHECKIN > ? AND rv.CHECKOUT < ?) OR --in/out

        (rv.CHECKIN = ? AND rv.CHECKOUT = ?) OR --in/out

        (rv.CHECKIN < ? AND  rv.CHECKOUT > ?) --in/out

    ) AND

    (r.RoomType = ? AND r.Bed = ?)

【问题讨论】:

    标签: sql derby


    【解决方案1】:

    请提供一些示例数据并指出失败的原因以及预期结果应该是什么。如果我理解正确,您正在尝试查找在指定的入住-退房范围内任何时候都没有预订的房间。也许是这样的:

    SELECT RoomID, RoomNo, Name, Floor, RoomType, Rent
      FROM hms.rooms r
      WHERE r.RoomID NOT IN (SELECT ROOM_ID
                               FROM hms.reservation rv
                               WHERE rv.CHECKIN  < :p_checkout
                                 AND rv.CHECKOUT > :p_checkin
                            )
        AND r.RoomType = :p_room_type AND r.Bed = :p_bed_type
    

    即如果有预订在我退房 (:p_checkout) 之前开始并且在我入住 (:p_checkin) 之前未完成,则从可用房间列表中排除预订的房间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2019-12-14
      • 2017-09-28
      • 1970-01-01
      • 2015-10-19
      • 2018-02-26
      相关资源
      最近更新 更多