嗨!
我有两张桌子,“房间”和“忙”。我的座位上有一个到达日期和一个出发日期的预订记录。
我想选择两次约会没有预约的房间。
有人告诉我他想预订房间的日期和他打算离开的日期,这样我就能展示给他可用的房间了。
繁忙的桌子,=>,IdRoom,,,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom,IdRoom.
房间,桌子,=>,IdRoom,NumRoom,NumRoom,,等等。
我尝试了不同的查询,但什么也没有得到。
我的测试查询:
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')谢谢你提前帮忙!
发布于 2018-02-14 18:40:24
好的,我已经更正了我的疑问。
这是我使用的查询:
SELECT *
FROM Room
WHERE RoomId in (
SELECT RoomID FROM Reservation WHERE EndDate <= @startDate OR
StartDate >= @endDate
)当然有一个更好的方法来做,但它做的工作。(谢谢你们帮助我;)
发布于 2018-02-12 21:25:58
您试图使用的查询在逻辑上是错误的。内连接在这里没有用。请查看下面的查询
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')
)发布于 2018-02-12 21:37:38
首先,你对引号有一个问题。但我认为这可能只是把问题中的价值观。
第二,您不需要busy中的列。没有对手,所以他们不感兴趣。
那么重叠逻辑是不正确的。类似于:
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
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
);https://stackoverflow.com/questions/48755634
复制相似问题