【发布时间】:2011-05-09 16:45:54
【问题描述】:
我的问题是:
有一个 sql 存储过程,它为我提供给定 hotelid 和 bookin 、bookout 日期的 hotel_reservation 表中两个日期之间的空闲房间列表。
程序如下:
ALTER PROCEDURE dbo.StoredProcedure1
(
@DateStart date,
@DateEnd date,
@hotel_id int
)
AS
SELECT DISTINCT room_type_id, room_id
FROM Room
WHERE room_id NOT IN (
SELECT room_id
FROM Hotel_Reservation
WHERE @DateStart BETWEEN bookingStart AND bookingEnd
OR @DateEnd BETWEEN bookingStart AND bookingEnd
or bookingStart BETWEEN @DateStart AND @DateEnd
or bookingEnd BETWEEN @DateStart AND @DateEnd
and hotel_id = @hotel_id
) and hotel_id = @hotel_id
RETURN
Room 表的定义:
room_id int
hotel_id int
room_type_id varchar
price money
room_description varchar
在房间表中,我使用了带有 room_id 和 Hotel_id 的重复键,因为 ID 为 201 的酒店可以有 room_id 101,ID 为 202 的酒店也可以有 room_id 101,以避免重复列我使用了这个。
hotel_reservation table的定义
reservation_id int
customer_id varchar
bookingStart date
bookingEnd date
status varchar
room_id int
hotel_id int
date date
问题是:
当我运行此程序时,如果用户在酒店 201 预订了 id 为 101 的房间,另一个用户在 id 为 202 的酒店中看不到 id 为 101 的房间。它从酒店预订了所有 101 id 的房间。
如何改进我的程序来克服这个问题?
感谢观看..
【问题讨论】:
标签: sql sql-server