我有4张桌子。我想知道是否可以通过任何加入获得最低酒店价格。有一个示例数据。
Table: hotels
id name country city phone
1 P Hotel France Paris 055555555
2 C Hotel Portuqal Lisbon 545489485
3 D Hotel ........ ...... ........
4 E Hotel ........ ...... ........
.
.
.
表:room_types
id name
----------------------------------------------
1 Standart Room
2 Deluxe Room
3 B-Plus
4 Villa
表:hotel_rooms
id hotel_id room_id
----------------------------------------------
1 1 1
2 1 3
3 1 4
4 2 4
5 2 2
6 3 1
7 3 2
8 4 1
表:价格
id price_pp price_tp discount hotel_rooms_id
----------------------------------------------------------------------------------
1 123.00 323.00 15 1
2 212.34 112.00 24 2
3 12.50 62.00 29 3
4 523.00 323.00 15 4
5 412.34 112.00 24 5
6 62.50 62.00 29 6
.
.
.
.
哪种房型无关紧要我只需要酒店的最低价格。我想得到这样的结果:
表:价格
id name country city phone price_pp price_tp discount
---------------------------------------------------------------------------------------------------
1 P Hotel France Paris 055555555 12.50 62.00 29
2 C Hotel Portuqal Lisbon 545489485 412.34 112.00 24
3 D Hotel ........ ...... ........
4 E Hotel
更新 这就是我尝试过的,但结果只显示酒店和MIN(price.price_pp)我还希望从价格中获得其他列。
SELECT hotels.*, MIN(prices.price_pp)
FROM hotels
LEFT JOIN hotel_rooms
ON hotels.id = hotel_rooms.hotel_id
LEFT JOIN prices
ON hotel_rooms.id = prices.hotel_rooms_id
GROUP BY hotels.id
答案 0 :(得分:0)
只需将2more列添加到您的选择列表中即可。像这样的东西 -
SELECT hotels.*, MIN(prices.price_pp), MIN(prices.price_tp), MIN(prices.discount)
FROM hotels
LEFT JOIN hotel_rooms
ON hotels.id = hotel_rooms.hotel_id
LEFT JOIN prices
ON hotel_rooms.id = prices.hotel_rooms_id
GROUP BY hotels.id
希望这有帮助。
答案 1 :(得分:0)
我猜你正在寻找一个每个酒店显示一排的结果集,其中包含酒店的详细信息和酒店最便宜的房间。但这是我的猜测。
我也被迫猜测你的人际关系是如何运作的。 prices.hotel_rooms_id
与hotel_rooms.id
有关吗?
专家提示:您花在指定问题上的时间越多,花在尝试解决问题上的时间就越少。
这里有两个步骤:
hotel_id
和price_pp
值。 JOIN
来检索酒店和房间的详细信息。查找每家酒店的最低价格MIN(price_pp)
。
SELECT MIN(p.price_pp) price, r.hotel_id
FROM prices p
JOIN hotel_rooms r ON p.hotel_rooms_id = r.id
GROUP BY r.hotel_id
自己运行该查询。说服自己它有效。
然后您可以将其用作子查询来检索您的详细信息。
SELECT hotels.*, prices.*
FROM hotels
JOIN hotel_rooms ON hotels.id = hotel_rooms.hotel_id
JOIN prices ON hotel_rooms.id = prices.hotel_rooms_id
JOIN (
SELECT MIN(p.price_pp) price, r.hotel_id
FROM prices p
JOIN hotel_rooms r ON p.hotel_rooms_id = r.id
GROUP BY r.hotel_id
) x ON prices.price_pp = x.price
AND hotel_rooms.hotel_id = x.hotel_id
这是经典查询模式的示例:查找包含极值(最小值,最大值等)的表中行的详细信息。最后两行中的ON
子句用于提取有趣的细节行。