Проверка базы данных Oracle с помощью SQL - PullRequest
1 голос
/ 22 марта 2012

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

Мой вопрос: я немного запутался в том, как бы я проверял таблицы, доступные в данный вечер. В ресторане есть 15 столов на любой вечер с 4-мя людьми за столом (группы могут быть от 4 до 6 больших, группы больше 4 займут два стола).

Как мне запросить базу данных, чтобы вернуть таблицы, доступные в данный вечер.

Спасибо.

EDIT ::

Это то, что я пробовал. (Часть этого псевдо, так как я не совсем уверен, как это сделать)

SELECT tables.table_id
FROM tables
LEFT JOIN table_allocation
ON tables.table_id = table_allocation.table_id
WHERE table_allocation.table_id is NULL;

Возвращает пустые строки, так как проверяет отсутствие таблицы. Я не совсем уверен, как бы я сделал тест даты бит.

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Чтобы найти строки TABLE, которые имеют нет строк TABLE_ALLOCATION в данном THEMED_NIGHT.TEME_NIGHT_DATE, вы должны иметь возможность сделать что-то вроде этого:

SELECT *
FROM TABLES
WHERE
    TABLE_ID NOT IN (
        SELECT TABLE_ALLOCATION.TABLE_ID
        FROM
            TABLE_ALLOCATION
            JOIN RESERVATION
                ON TABLE_ALLOCATION.RESERVATION_ID = RESERVATION.RESERVATION_ID
            JOIN THEMED_NIGHT
                ON RESERVATION.THEME_ID = THEMED_NIGHT.THEME_ID
        WHERE
            THEME_NIGHT_NAME = :the_date
    )

Простым английским языком:

  • Присоединитесь к TABLE_ALLOCATION, RESERVATION и THEMED_NIGHT и принимайте только те из них, которые находятся на данную дату (:the_date).
  • Откажитесь от строк TABLE, которые связаны с кортежами выше (NOT IN).
  • Те оставшиеся строки ТАБЛИЦЫ свободны на ночь.
1 голос
/ 22 марта 2012

Попробуйте:

SELECT tables.table_id
FROM tables t
WHERE NOT EXISTS
(SELECT NULL
 FROM table_allocation a
 JOIN reservation r 
   ON a.reservation_id = r.reservation_id and 
      r.`TIME` between :Date and :Date+1
 WHERE t.table_id = a.table_id)

Примечание: будут возвращаться только таблицы, которые не были забронированы в любой момент в рассматриваемый день.

...