2014-11-11 4 views
-2

Я хочу найти код комнаты с лекциями объемом 100 или более и бесплатно (т. Е. Не забронирован) во вторник в 12 часов.Исключая определенные значения в выводе SQL

Данные сохраняются в таблице roomBooking, который имеет:

bookingID

roomCode

moduleCode

dayReq

timeReq

семестр

classSize

Мой запрос до сих пор:

SELECT rCode, capacity 
FROM room 
INNER JOIN roomBooking 
ON room.rCode = roomBooking.roomCode 
WHERE capacity >= 100; 

Я пытался использовать WHERE NOT EXISTS положение, но не мог получить это право. Моя цель - исключить комнаты, которые бронируются во вторник в 12 часов.

+1

Вы ищете все вторники в полдень или в определенный момент? – april4181

+0

Кроме того, можете ли вы рассказать нам какую-то базу данных, которую вы используете? (SQL-Server/Oracle/MySQL/и т. Д.) – april4181

+0

@ april4181 Я ищу комнаты, которые находятся над этой емкостью, но не те, которые были забронированы во вторник в 12 –

ответ

0

Попробуйте это:

SELECT 
    rCode, 
    capacity 
FROM 
    room 
    LEFT JOIN 
    roomBooking ON 
     room.rCode = roomBooking.roomCode AND 
     roomBooking.dayReq = 'Tuesday' AND -- fix with the right value 
     roomBooking.timeReq = '12:00' -- fix with the right value 
WHERE 
    capacity >= 100 AND 
    roomBooking.BookingID IS NULL -- this will exclude all rooms with bookings on that date/time 
+0

Когда я пытаюсь это сделать, я получаю «JOIN выражение не поддерживается "и roomBooking.dayReq =" Вторник "подсвечивается –

+0

Мое намерение в публикации заключается в том, что вы конвертируете мой жесткий код« Вторник »с формулой, которая сообщит dayReq, что вас интересует. Не знаю, как это сделать, пожалуйста, скажите мне, что такое тип данных этого столбца, покажите мне пример фактического значения из этого столбца и определите «вторник» в том же формате. Тогда сделайте то же самое для timeReq – AHiggins

+0

Я понимаю, что это может сбивать с толку: я хочу знать, содержит ли 'dayReq'« вторник »,« 2014-11-11 00: 00: 00.000 »,« 3 »или что-то еще подобное. .. – AHiggins

0

НЕ СУЩЕСТВУЕТ это путь, как вы уже приняли. Вы хотите, чтобы выбрать номера, для которых нет roomBooking определенного вида не существует:

select * 
from room 
where capacity >= 100 
and not exists 
(
    select * 
    from roombooking 
    where roomBooking.roomcode = room.rcode 
    and dayreq = ... 
    and timereq = ... 
); 

Я не писал критерии день и время, так как я не знаю, что эти поля содержат точно и какой тип данных они находятся. Как-то вы получите будний день с dayreq и время от timereq. (Не должно быть также временного интервала для того, сколько часов номер забронирован, кстати?)

+0

, когда я пытаюсь это сделать, я получаю сообщение об ошибке «Несоответствие типа данных в выражении критериев» –

+0

Ну, единственными критериями являются код комнаты/rcode и емкость/100. Я не вижу несоответствия там. Как вы пишете выражения dayrec и timereq? Какие типы данных являются этими двумя? Что они содержат? –

Смежные вопросы