2014-12-17 6 views
2

У меня есть 2 MySQL таблицаКак отфильтровать записи из одной таблицы, где ее идентификатор встречается в столбце другой таблицы

tableRooms содержит номер отеля

tableRoomsBooked содержит зарезервированные даты номеров

enter image description here

Мне нужен запрос SQL, который возвращает номера, которые не имеют заказов между 2 указанными датами. Это то, что у меня до сих пор:

SELECT * FROM `tableRooms` 
LEFT JOIN `tableRoomsBooked` 
ON `tableRooms`.`id` = `tableRoomsBooked`.`room_id` 

WHERE (date BETWEEN '2015-01-02' AND '2015-01-30') 
....? 

запрос должен получить только room_id 2, потому что номер 2 не имеет заказов в этот период.

В чем должен быть мой запрос?

+1

'где дата НЕ между '? –

+2

Использует ли MySQL синтаксис NOT EXISTS? –

+0

@MarcB, где не между ними, также будет возвращать room_id 1, поскольку он имеет дату «2015-01-01» – AdamMc331

ответ

4
select * 
    from tableRooms 
    where id not in (
    select distinct room_id 
    from tableRoomsBooked 
    where date between '2015-01-02' and '2015-01-30' 
    ) 

Это приведет к выбору списка существующих идентификаторов в дополнительном запросе, а затем исключит их из основного запроса.

В любом случае, вы должны изменить название столбца «дата», потому что «дата» может сбивать с толку, как только это будет тип данных.

+1

Это работало как шарм. Благодаря! И я изменил столбец даты. Спасибо за совет! – SiteHopper

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