0

所以我有一点问题,在我的 ASP.Net 网站上,我希望它显示所有当前可用且未使用的房间。当我说不使用时,我的意思是目前没有人为那个房间预留,所以系统日期不在 checkin 和 checkoutdate 的任何值之间。

我的架构的一部分:

    CREATE TABLE "Rooms"(

    RoomNo int NOT NULL,
    RoomType nvarchar(20) NULL,
    PricePerNight money NULL,
    MaximumOccupancy int NULL,
    NoOfBeds int NULL,
    NoOfBathrooms int NULL,
    Entertainment bit NULL,
    RoomService bit NULL,
    Gym bit NULL,

    CONSTRAINT PK_Rooms PRIMARY KEY(RoomNo)
)
CREATE TABLE "Reservation"(

    ReservationID int IDENTITY (1,1) NOT NULL,
    CustomerID int NOT NULL,
    RoomNo int NOT NULL,
    CheckInDate date NOT NULL,
    CheckOutDate date NOT NULL,
    NoOfDays int NOT NULL,

    CONSTRAINT PK_Reservation PRIMARY KEY(ReservationID),

    CONSTRAINT FK_Reservation_Customers_CustID FOREIGN KEY(CustomerID)  
        REFERENCES dbo.Customers(CustomerID),

    CONSTRAINT FK_Reservation_Rooms_RoomNo FOREIGN KEY(RoomNo)
        REFERENCES dbo.Rooms(RoomNo)
)

所以这是我的想法,我假设我需要一个类似这样的 sql 查询:

从房间中选择所有 &CheckInDate != "从预订中选择 CheckIndate" AND &CheckOutDate != "从预订中选择 CheckOutDate"。

但这有一些缺陷。

有人可以告诉我如何做到这一点,如何使我的 Sue-do-code(让我们称之为)更可行,因为我不确定这样的事情是否可行,如果有必要建议我可以做出改进到我的架构。

TLDR;我需要一个查询,其中有人输入了 checkindate 和 checkoutdate,它会返回所有可用的房间。

4

2 回答 2

0

尝试这个..

从不存在的房间中选择 *(从房间 r 中选择 *,预订 rs WHERE r.RoomNo = rs.RoomNo AND GETDATE() BETWEEN rs.CheckInDate AND rs.CheckOutDate)

于 2012-09-02T19:52:18.813 回答
0

这就是我想要的。

SELECT dbo.Rooms.RoomNo
FROM dbo.Rooms JOIN dbo.Reservation
ON (dbo.Rooms.RoomNo = dbo.Reservation.RoomNo)
WHERE '2012-01-01' NOT BETWEEN dbo.Reservation.CheckInDate AND dbo.Reservation.CheckOutDate
AND '2012-01-05' NOT BETWEEN dbo.Reservation.CheckInDate AND dbo.Reservation.CheckOutDate;

花了时间,但我最终得到了它。where 语句的初始日期可以替换为 &Date。

于 2012-09-02T20:05:21.083 回答