我正努力为酒店创建一个简单的数据库。它应该照顾所有预订。我正准备制定一个程序,将搜索给定日期内未预订的房间。但是,到目前为止,我的过程可以显示某个时候已经预订的房间号。到目前为止,仅预订了20个房间中的前5个,它们出现了,而其他房间则没有。
谁能给我任何想法,什么是错甚至更好,如何使整个过程正常进行?
These are the important tables
This is the call: 结果应该一直上升到“ NumerPokoju” = 20,但它们停止了,因为它们不在“预订”表中
为了澄清这个问题:我希望该程序还显示从未预订过的简单房间,而不仅仅是那些曾经被预订过一次的房间。
DELIMITER //
CREATE PROCEDURE freeRooms(IN ilosc int, IN poczatek date, IN koniec date)
BEGIN
SELECT Rooms.RoomID AS "Numer pokoju", Rooms.Places AS "Ilosc lozek"
FROM Rooms INNER JOIN Bookings ON Rooms.RoomID = Bookings.RoomID
WHERE ((poczatek < Bookings.ArrDate AND koniec < Bookings.ArrDate) OR ((poczatek > Bookings.DepDate) AND (koniec > Bookings.DepDate)))
AND ilosc <= Rooms.Places;
END //
DELIMITER ;
答案 0 :(得分:0)
使用NOT EXISTS代替联接:
SELECT
r.RoomID AS "Numer pokoju",
r.Places AS "Ilosc lozek"
FROM Rooms r
WHERE
NOT EXISTS (
SELECT 1 FROM Bookings
WHERE
RoomID = r.RoomID
AND (
poczatek BEWEEN ArrDate AND DepDate
OR
koniec BEWEEN ArrDate AND DepDate
)
)
AND
ilosc <= r.Places;
我不确定最后一个条件:ilosc <= r.Places
是否以及为什么需要它。