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

时间:2014-12-17 19:28:57

标签: mysql sql

我有2个MySQL表

tableRooms包含酒店的房间

tableRoomsBooked包含预订的房间日期

enter image description here

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

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 个答案:

答案 0 :(得分:4)

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

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

无论如何,你应该更改" date"的名称。专栏,因为" date"一旦它也是一种数据类型,它就会引起混淆。