如何逆转此过程的结果?

时间:2019-04-29 13:04:17

标签: mysql sql

我正努力为酒店创建一个简单的数据库。它应该照顾所有预订。我正准备制定一个程序,将搜索给定日期内未预订的房间。但是,到目前为止,我的过程可以显示某个时候已经预订的房间号。到目前为止,仅预订了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 ;

1 个答案:

答案 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是否以及为什么需要它。