首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在两个日期之间选择

在两个日期之间选择
EN

Stack Overflow用户
提问于 2018-02-12 21:16:18
回答 5查看 107关注 0票数 0

嗨!

我有两张桌子,“房间”和“忙”。我的座位上有一个到达日期和一个出发日期的预订记录。

我想选择两次约会没有预约的房间。

有人告诉我他想预订房间的日期和他打算离开的日期,这样我就能展示给他可用的房间了。

繁忙的桌子,=>,IdRoom,,,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom.

房间,桌子,=>,IdRoom,NumRoom,NumRoom,,等等。

我尝试了不同的查询,但什么也没有得到。

我的测试查询:

代码语言:javascript
运行
复制
SELECT Room.*, Busy.* 
FROM Room
INNER JOIN Busy ON Room.RoomdId= Busy.RoomdId
WHERE (@dateArr NOT BETWEEN 'Busy.ArrivalDate' AND 'Busy.DepartureDate') 
AND (@dateDep NOT BETWEEN 'Busy.ArrivalDate' AND 'Busy.DepartureDate')

谢谢你提前帮忙!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-02-14 18:40:24

好的,我已经更正了我的疑问。

这是我使用的查询:

代码语言:javascript
运行
复制
SELECT * 
FROM Room 
WHERE RoomId in (
             SELECT RoomID FROM Reservation WHERE EndDate <= @startDate OR  
             StartDate >= @endDate
             )

当然有一个更好的方法来做,但它做的工作。(谢谢你们帮助我;)

票数 1
EN

Stack Overflow用户

发布于 2018-02-12 21:25:58

您试图使用的查询在逻辑上是错误的。内连接在这里没有用。请查看下面的查询

代码语言:javascript
运行
复制
SELECT Room.*
FROM Room
WHERE NOT EXISTS 
(
   SELECT 1 FROM Busy WHERE Room.RoomdId= Busy.RoomdId AND
     (@dateArr BETWEEN 'Busy.ArrivalDate' AND 'Busy.DepartureDate') AND 
     (@dateDep BETWEEN 'Busy.ArrivalDate' AND 'Busy.DepartureDate')
)
票数 0
EN

Stack Overflow用户

发布于 2018-02-12 21:37:38

首先,你对引号有一个问题。但我认为这可能只是把问题中的价值观。

第二,您不需要busy中的列。没有对手,所以他们不感兴趣。

那么重叠逻辑是不正确的。类似于:

代码语言:javascript
运行
复制
SELECT r.*
FROM Room r LEFT JOIN
     Busy b
     ON r.RoomdId = b.RoomId AND
        @dateArr <= b.DepartureDate AND
        @dateDep >= b.ArrivalDate
WHERE b.RoomId IS NULL;

你的问题不清楚某人是否可以在出发日期到达(反之亦然)。如果是这样的话,<=>=可能需要失去相等的比较。

编辑:

在MS Access中,您可以使用NOT EXISTS

代码语言:javascript
运行
复制
SELECT r.*
FROM Room r LEFT JOIN
WHERE NOT EXISTS (SELECT 1
                  FROM Busy b
                  WHERE r.RoomdId = b.RoomId AND
                        @dateArr <= b.DepartureDate AND
                        @dateDep >= b.ArrivalDate
                 );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48755634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档