我希望能够获得数据,显示每家酒店有多少房型。 像这样:
HotelName RoomName NumOfRooms
--------------------------------------------------------------------
Hotel 1 Queen Guest Room 23
Hotel 1 Queen Guest Room Plus 17
(7+ RoomNames for Hotel 1)
...
Hotel 2 Queen Guest Room 14
Hotel 2 Queen Guest Room Plus 9
(7+ RoomNames for Hotel 2)
...
Hotel 3 Queen Guest Room 9
Hotel 3 Queen Guest Room Plus 6
(7+ RoomNames for Hotel 3)
我只是到目前为止:
SELECT `Hotel`.HotelName, `RoomType`.RoomName FROM `Hotel`
RIGHT JOIN `Room` ON `Hotel`.HotelID = `Room`.HotelID
RIGHT JOIN `RoomType` ON `Room`.TypeID = `RoomType`.TypeID
GROUP BY `RoomID` ORDER BY `RoomID` ASC;
它只会显示每个房间的位置以及它的类型,我只是无法弄清楚如何使用它,我相信我应该使用嵌套查询,但我不知道该怎么做。
设置
我有一个酒店数据库,有三家酒店,每个酒店都有房间,每个房间是九种类型之一(客房,客房加,单人客房等......)
地图:
HotelID HotelName
------------------
1 Hotel 1
2 Hotel 2
3 Hotel 3
RoomType:
TypeID RoomName
-----------------------------
1 Queen Guest Room
2 Queen Guest Room Plus
3 Single Guest Room
6 more...
间:
RoomID HotelID TypeID
----------------------
1 1 3
2 1 3
3 1 3
150+ more...
我非常感谢所有帮助,谢谢你!
答案 0 :(得分:0)
CROSS JOIN
Hotel
和RoomType
获取酒店和房型的所有组合。然后LEFT JOIN
Room
将所有房间添加到指定的酒店房间类型组合。如果酒店没有NULL
类型的房间将被添加。然后使用GROUP BY
和count()
来计算酒店所拥有的房型类型。
SELECT h.HotelName,
rt.RoomName,
count(r.TypeID)
FROM Hotel h
CROSS JOIN RoomType rt
LEFT JOIN Room r
ON r.HotelID = h.HotelID
AND r.TypeID = rt.TypeID
GROUP BY h.HotelName,
h.HotelID,
rt.RoomName,
rt.TypeID;
除非使用count(*)
count()
,否则不会计算NULL
个值。因此,当酒店没有相应类型的房间时,使用count(r.TypeID)
我们会得到0。
(注意:我已将h.HotelID
和rt.TypeId
添加到GROUP BY
,因为可能有多个酒店或房间类型具有相同名称。)