SQL - 加入和子查询

时间:2016-02-27 13:30:59

标签: sql sql-server database

我的数据库中有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

我得到了这个结果

enter image description here

但我想要的结果是:

enter image description here

3 个答案:

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