Функция присоединения к справке TSQL Query - PullRequest
0 голосов
/ 10 апреля 2011

Я создал простой запрос, чтобы попытаться выяснить, какая вилла будет бесплатной через определенный промежуток времени (checkin_date и checkout_date).

Однако теперь, когда я думаю об этом, я не думаю, что нижезапрос выдаст правильные результаты:

SELECT DISTINCT default_villa_type  
FROM villa, reservation  
WHERE villa.villa_type = reservation.default_villa_type  
and res_checkin_date not between '2011-12-21' and '2011-12-23'
and res_checkout_date not between '2011-12-21' and '2011-12-23'

Мне нужен запрос для использования:

Таблица вилл со следующими столбцами:

(villa_id, phone_ext, villa_type, no_of_rooms, no_of_beds, default_price_plan)

Таблица резервирования сследующие столбцы:

(confirm_no, credit_card_no, res_checkin_date, res_checkout_date, default_villa_type, price_plan)

Я не верю, что обе таблицы используются для определения того, какой тип вилл все еще доступен по датам, указанным в запросе, но я могу ошибаться.пара глаз, чтобы взглянуть на это.

1 Ответ

2 голосов
/ 10 апреля 2011

Вы можете сначала попытаться найти все виллы, которые НЕ являются бесплатными, поскольку у вас нет записей, представляющих бесплатные виллы, а только записи, представляющие несвободные виллы.

SELECT  villa_id
FROM    villa
WHERE   villa_type NOT IN (
    SELECT  default_villa_type
    FROM    reservation
            --reservations starting within range
    WHERE   res_checkin_date > '2011-12-21'
            AND res_checkin_date < '2011-12-23'

            --reservations starting before range and ending after range
            OR (
                res_checkin_date <= '2011-12-21'
                AND res_checkout_date > '2011-12-21'
            )

            --reservations ending within range
            OR (
                res_checkout_date > '2011-12-21'
                AND res_checkout_date < '2011-12-23'
            )
)

Другой способ, согласно комментарию Микаэля, может быть:

SELECT  villa_id
FROM    villa
WHERE   villa_type NOT IN (
    SELECT default_villa_type
    FROM   reservation
    WHERE  res_checkin_date < '2011-12-23'
           AND res_checkout_date > '2011-12-21'
)

Я бы также предложил вам использовать переменные вместо статических строковых дат.

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