Как отменить результаты этой процедуры? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать простую базу данных для отеля.Это должно заботиться обо всех заказах.Я пытаюсь сделать процедуру, которая будет искать не забронированные номера на указанную дату.Однако на данный момент моя процедура может показать номера комнат, которые уже были забронированы в какой-то момент.Пока забронированы только первые 5 из 20 номеров, а они появляются, а другие нет.

Кто-нибудь может дать мне какие-либо идеи, что не так или даже лучше, как заставить всю процедуру работать?

Это важные таблицы

Это вызов: Результаты должны доходить до "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 голосов
/ 29 апреля 2019

Используйте 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, если и зачем оно вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...