数据库酒店预订

时间:2012-09-02 18:16:03

标签: c# asp.net sql-server-2012

所以我有一点问题,在我的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查询:

  

选择所有FROM Rooms Where& CheckInDate!=“选择CheckIndate From   预订“AND& CheckOutDate!=”选择CheckOutDate From   保留”。

但这有一些缺陷。

有人可以告诉我如何才能做到这一点,我怎样才能使我的Sue-do-code(让我们称之为)更可行,因为我不确定这样的东西是否会起作用,并且如果必然会提出改进的话我可以制作我的架构。

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

2 个答案:

答案 0 :(得分:0)

试试这个..

SELECT * 从房间 什么不存在 (选择 *  从房间r,预订rs  在哪里r.RoomNo = rs.RoomNo和GETDATE()在rs.CheckInDate和rs.CheckOutDate之间)

答案 1 :(得分: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。