酒店(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查询。
非常感谢你!!!
无法真正理解您要对所有子查询做什么,但请尝试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'