如何从一个表中其ID出现在另一表的列中的表中过滤掉记录

Sit*_*per 2 mysql sql

我有2个MySQL表

tableRooms包含酒店的房间

tableRoomsBooked包含房间的预订日期

在此处输入图片说明

我需要一个SQL查询,该查询返回2个给定日期之间没有预订的房间。到目前为止,这是我得到的:

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

WHERE (date BETWEEN '2015-01-02' AND '2015-01-30')
....?
Run Code Online (Sandbox Code Playgroud)

该查询仅应获得room_id 2,因为在此期间房间2没有预订。

我的查询应该是什么样的?

小智 5

   select * 
   from tableRooms 
   where id not in (
     select distinct room_id 
     from tableRoomsBooked 
     where date between '2015-01-02' and '2015-01-30'
   )
Run Code Online (Sandbox Code Playgroud)

这将选择子请求中现有ID的列表,然后将其从主请求中排除。

无论如何,您应该更改“ date”列的名称,因为“ date”也是一种数据类型,也可能会造成混淆。