提问者:小点点

这个SQL语句有什么问题?


酒店(Hotel_No,Name,Address)

房间(Room_No,Hotel_No,Type,Price)

预订(Hotel_No,Guest_No,Date_From,Date_To,Room_No)

客人(Guest_No,姓名,电话号码,地址)

我在酒店管理数据库中有这些表格。 主键和复合键采用粗斜体字体。

我想编写SQL查询来列出'Qeens Hotel‘所有房间的详细信息,包括入住该房间的客人的姓名,如果该房间目前已有人入住的话。

我是这样写SQL查询的

SELECT Room.*, Name
FROM Guest
WHERE Guest_No = (SELECT Guest_No
    FROM Booking
    WHERE Hotel_No = (SELECT Hotel_No
          FROM Hotel
          WHERE Name LIKE “%Queens Hotel%”
    )
)
JOIN Room
ON Hotel_No = (SELECT Hotel_No
    FROM Hotel
    WHERE Name LIKE “%Queens Hotel%”
    )

我想知道这个SQL查询出了什么问题? 我是SQL的初学者。 帮助我更正此SQL查询。

非常感谢你!!!


共2个答案

匿名用户

无法真正理解您要对所有子查询做什么,但请尝试inner join everything。 从那开始,做任何你需要的修改。

SELECT guest.name
FROM Guest
INNER JOIN Booking ON guest.name = booking.guest_no
INNER JOIN HOTEL ON hotel.hotel_no = booking.hotel_no
when hotel.name LIKE “%Queens Hotel%”

匿名用户

您需要联接%s。 获取当前可能占用房间的客人的姓名有点棘手:您需要一个左联接来避免过滤出“空”房间,还需要一些日期逻辑来识别“当前”的预订:

select r.*, g.name
from hotel h
inner join room r 
    on  r.hotel_no = h.hotel_no
left join booking b 
    on  b.hotel_no   =  r.hotel_no
    and b.room_no    =  r.room_no
    and b.date_from  >= current_date
    and b.date_to    <= current_date
left join guest g
    on g.guest_no = b.guest_no
where h.name = 'Queens Hotel'