MYSQL预订Avaliablity查询

时间:2015-04-30 19:37:25

标签: mysql join

您好我正在尝试在MYSQL Workbench中编写一个MYSQL查询,它基本上显示了Room表中的空间,这些空间在Arrival_Departure表中的某些签入和签出日期之间是免费的。我相信我需要在我的查询中使用Join和Not Between语句来实现这一点,但我不确定如何写出来实现我的目标。我的表结构已在下面提供。

Room: Room_ID (PK),Floor ,Price 

Arrival_Departure:Arr_Dept_ID (PK),Room_ID (FK),Check_In_Date,Check_Out_Date

1 个答案:

答案 0 :(得分:0)

我认为像这样做一个子选择会得到你的结果......

SELECT *
FROM 'Room'
WHERE Room_ID NOT IN (
  SELECT distinct(Room_ID)
  FROM 'Arrival_Departure' 
  WHERE Check_In_Date between startDate AND endDate 
  OR Check_Out_Date between startDate AND endDate
  OR (Check_In_Date < startDate AND Check_Out_Date > endDate)
)

<强>问题

“非常感谢这似乎有用,但是你可以解释一下这个独特的功能是什么,因为查询似乎仍然可以在没有它的情况下工作”

<强>答案 Distinct仅返回每个id的一个版本,

如果您有以下数据:

room_id  check_in    checkout
1           4/15/15     4/16/15
2           4/15/15     4/17/15
1           4/17/15     4/19/15
3           4/18/15     4/20/15
2           4/18/15     4/19/15
1           4/20/15     4/21/15

查询select room_id from table返回:

room_id
1
2
1
3
2
1

查询select distinct(room_id) from table返回:

room_id
1
2
3

因此,它基本上消除了重复数据