2016-02-27 2 views
0

У меня есть 4 таблицы в моей базе данныхSQL - Регистрация и подзапросов

бронирований

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) 

Когда я использую этот запрос: Select * From Room, где Room.Hotel_No = 6

Я получаю этот результат

enter image description here

Но результат я хочу:

enter image description here

+1

Это выглядит л ike домашняя проблема (намек: в реальном мире деньги не хранятся с помощью 'float'). Вы должны включить то, что вы пытались. –

+0

^Ха-ха, пятно на, Сэр: D – Chendur

+0

Это домашняя проблема :). – Flaugzig

ответ

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 
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 
+0

Это не решение проблемы. Допустим, у меня есть 6 номеров в hotel_no = 6 Затем я хочу показать 6 комнат один раз и с другим вызовом столбца, например, GuestNameAtRoom отобразит имя гостя, если он живет в комнате на текущую дату. Если в комнате нет ни одного человека, он должен отображать нуль.Надеюсь, что это имеет смысл – Flaugzig

+0

У вас недостает кода в конце запроса :) – Flaugzig

+0

Все еще не решает проблему: /, я все еще хочу отображать ВСЕ комнаты из данного отеля и отображать имя гостя, если он живет там в настоящее время показывается значение null. – Flaugzig

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) 
+0

Таблица выглядит так, как я ее хочу, но «Booking.Hotel_No = 6» также показывает другие номера отеля. Я только хочу показать номера один раз в этом отеле. – Flaugzig

+0

попробуйте отредактировать, затем дайте мне знать – wajeeh

+0

Все тот же результат. Он показывает все номера во всех отелях – Flaugzig

Смежные вопросы