我有2个表room
和booking
。试图制作酒店管理原型这两个表有以下架构
所以我们的想法是返回所有可用的房间。为此,可以有两个类别。房间已经签出,这意味着退房日期将少于今天的日期(或下一个入住日期)或房间至少没有预订一次(此房间尚未预订。)
因此查询有点棘手。我设法只完成了第一部分。
select room_no
from room,booking
where room.room_no= booking.rooms
and (booking.check_out < strftime('%s', 'now'))`
check_in
和check_out
存储在第二纪元
如何编辑查询以便它还能返回未预订的房间?
答案 0 :(得分:1)
您的架构图片并没有出现在我身上,但我认为您需要这些......
您希望一个查询返回已预订和未预订的房间。因此,您希望将房间和预订表之间的连接条件更改为&#34; left&#34;加入以便无论预订中是否存在行,都会返回所有房间。完成此操作后,从预订表中返回的没有连接行的任何行都将是未预订的房间。
我没有SQLite安装来测试这个,但这是我想出来的......
SELECT room_no,
CASE WHEN booking.rooms IS NULL THEN 'Not Booked' ELSE 'Booked' END As BookingStat
FROM room
LEFT OUTER JOIN booking ON room.room_no = booking.rooms
WHERE (booking.check_out < strftime('%s', 'now')
OR booking.check_out IS NULL)
答案 1 :(得分:1)
好吧,我已经设法从@barmar和@Rich的组合解决方案中获得所需的输出
SELECT room_no FROM room LEFT OUTER JOIN booking ON room.room_no = booking.rooms
WHERE booking.rooms is null or booking.check_out < strftime('%s', 'now')
答案 2 :(得分:0)
两个类别的共同点是目前没有预订房间。
在SQL中,可以这样写:
SELECT room_no
FROM room
WHERE NOT EXISTS (SELECT 1
FROM booking
WHERE booking.rooms = room.room_id
AND booking.check_out >= strftime('%s', 'now'))