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

Posted

技术标签:

【中文标题】如何从一个表中过滤出其 id 出现在另一个表的列中的记录【英文标题】:How to filter out records from one table where its id occurs in a column of another table 【发布时间】:2014-12-17 19:28:56 【问题描述】:

我有 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')
....?

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

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

【问题讨论】:

where date NOT between? MySQL 是否使用 NOT EXISTS 语法? @MarcB where not between 也将返回 room_id 1 因为它的日期为 2015-01-01 @McAdam331 你是对的。这也将返回 room_id 1。Dookie 给出了下面的答案。 【参考方案1】:
   select * 
   from tableRooms 
   where id not in (
     select distinct room_id 
     from tableRoomsBooked 
     where date between '2015-01-02' and '2015-01-30'
   )

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

无论如何,您应该更改“日期”列的名称,因为“日期”一旦也是一种数据类型,就会让人感到困惑。

【讨论】:

这就像一个魅力。谢谢!我更改了日期列。感谢您的提示!

以上是关于如何从一个表中过滤出其 id 出现在另一个表的列中的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从表中选择哪个名称存储在另一个表中带有“0”前缀的列中

如何在另一个表的列中插入选择查询的结果

Oracle SQL:根据在另一个表中给定条件的列中找到的值插入

pyspark:数据框在另一个数据框的列中按ID选择行

如何在另一列中按条件分组的列中查找下一个日期?

将一个表的列中的数据与另一个表中的同一列进行比较