【发布时间】:2013-01-27 11:36:10
【问题描述】:
请查看表结构、查询和结果。
会议室
ID | Area | RoomNo Capacity distances
--- ----- --------- ---------- ----------
1 1 R1 10 10
2 1 R3 24 4
3 8 R4 24 4
4 1 R5 10 10
预订表
ReservationID RoomID DateTimeStart DateTimeEnd
------------- ----------- ----------------------- -----------------------
1 1 2013-10-10 17:00:00.000 2013-10-10 19:00:00.000
查询
Declare @Start Datetime
Declare @End Datetime
set @Start='2013-10-10 13:00:00.000'
set @End='2013-10-10 14:00:00.000'
select
MeetingRoom.ID
from
MeetingRoom
left Join ResReservationTable Res on Res.RoomID = MeetingRoom.ID
Where
Res.DateTimeStart != @Start and Res.DateTimeEnd != @End
and (Res.DateTimeStart Not Between @Start and @End)
and (Res.DateTimeEnd Not Between @Start and @End)
此查询只返回一条记录,因为它应该返回 4 条记录
【问题讨论】:
-
什么是 Res?里面的数据是什么?那么为什么不向我们展示其中的数据呢?它包含多少行和 RoomID 值?
-
@PreetSangha Res 是表名,包含会议室的预订详情
-
您认为这将返回四条记录。从您的加入中可以清楚地看出,只有一行与您的条件相匹配。如果 ReservationTable RoomID 在 MeetingRoom 中使用了更多时间,那么您可以查看更多结果....
-
因为我使用的是左连接,所以它应该带来 3 条不在 Reservation 表中的记录和 1 条记录,因为这条记录的条件为真
标签: mysql sql sql-server database