Связано ли ScheduleTime с ScheduleDates? Насколько вам известно, схема выглядит так, как будто у вас будет МНОГО дублирующих данных или просто неверные данные.
Похоже, ваше отображение PK / FK времени и даты не отображается правильно. Ссылка указывает тип времени. Но в расписании есть timetimeid?
Если значения верны:
SELECT tblScheduleDates.*, tblScheduleDates.*
FROM tblScheduleDates
JOIN tblScheduleTimes
ON tblScheduleTimes.scheduleTimeID =
tblScheduleDates.scheduleTime_ID
WHERE NOT EXISTS
(
SELECT 1
FROM tblBookings
JOIN tblBookingStatus
ON tblBookingStatus.Status = 'Booked'
WHERE tblBookings.ScheduleDate_ID
= tblScheduleDates.scheduleDateID
)
Я бы предложил переименовать таблицу, так как она, кажется, действительно является датой и временем расписания, смешанными вместе. Решение, похожее на мою вторую пулю ниже, решило бы это неправильное название.
Если ссылки на диаграмме верны:
Может быть, я что-то упускаю, но вот что я вижу:
Таблица бронирования привязана только к запланированной дате. Однако эта запланированная дата имеет тип, который связан со временем. Это так, что вы можете иметь тип, который является графиком на весь день? В противном случае при каждом бронировании 28/02/2012 необходимо создать новую запись в SchedulDates. Итак, у вас может быть 5 строк на одну и ту же дату, только потому что они имеют разное время? Я не вижу необходимости хранить дату 5 раз, когда действительно разные времена.
Почему бы не привязать бронирование к расписанию И расписанию? Это также значительно упростит ваш запрос.
Или, может быть, у вас есть таблица сопоставления запланированной даты и времени, которая связывает их вместе, и тогда вам нужно только сослаться на эту одну таблицу в бронировании?
Или вы можете просто хранить дату и время вместе в одной таблице?
Может быть, есть деловая причина, по которой я скучаю.