我的数据库中有4个表
预订
Booking_Id : int, Primary Key
Hotel_No : int, foreign key
Guest_No : int, foreign key
Date_From : date
Date_To : date
Room_No : int, foreign key
访客
Guest_No : int, primary key
Name : varchar(30)
Address : varchar(50)
饭店
Hotel_No : int, primary key,
Name : varchar(30)
Address : varchar(50)
间
Room_No : int, primary key
Hotel_No : int primary key, foreign key
Types : char(1)
Price : float
问题:
我想在给定酒店的房间桌子上显示所有信息。如果客人今天住在其中一个房间,我想显示他的名字,否则为null。
我尝试了几个查询,但没有一个能解决我的问题。
提前致谢
编辑:
我尝试过与
类似的东西select Room.*,Guest.Name
from Room
join Booking on Room.Room_No = Booking.Room_No
join Guest on Guest.Guest_No = Booking.Guest_No
where Booking.Hotel_No = 6 AND cast(Date_From AS DATE) < = cast(CURRENT_TIMESTAMP AS DATE)
当我使用此查询时: 选择* From Room from Room.Hotel_No = 6
我得到了这个结果
但我想要的结果是:
答案 0 :(得分:1)
试试这个:
Select r.*, g.name
from Room as r
left join Booking as b on r.Room_No = b.Room_No
left join Guest as g on g.Guest_No = b.Guest_No
left join Hotel as h on h.Hotel_No = b.Hotel_No
where h.Hotel_No = 6 AND b.Date_From <= cast(GETDATE() as date)
答案 1 :(得分:0)
SELECT R.*,B.*, G.*
FROM BOOKING B
RIGHT JOIN ROOM R
ON B.ROOM_NO = R.ROOM_NO
AND B.HOTEL_NO =R.HOTEL_NO
FULL JOIN GUEST G
ON B.GUEST_NO = G.GUEST_NO
AND B.HOTEL_NO = 6 -- CUSTOMIZE THE HOTEL NUMBER TO YOUR REQUIREMENT
答案 2 :(得分:0)
我找到了解决方案:
select Room.*, Guest.Name from Room
left join(select * from Booking where Booking.Date_From <= GetDate()
And Booking.Date_To >= GetDate()) as book on room.Room_No = book.Room_No
left join Guest on book.Guest_No = Guest.Guest_No where Room.Hotel_No = 6