从多个条件-SQLite中选择数据

时间:2015-07-22 19:54:48

标签: sql sqlite

我有2个表roombooking。试图制作酒店管理原型这两个表有以下架构 image

所以我们的想法是返回所有可用的房间。为此,可以有两个类别。房间已经签出,这意味着退房日期将少于今天的日期(或下一个入住日期)或房间至少没有预订一次(此房间尚未预订。)

因此查询有点棘手。我设法只完成了第一部分。

select room_no 
from room,booking 
where room.room_no= booking.rooms 
and (booking.check_out < strftime('%s', 'now'))`

check_incheck_out存储在第二纪元

如何编辑查询以便它还能返回未预订的房间?

3 个答案:

答案 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'))