2011-04-13 32 views
1

選擇的房間,我有3個表室,酒店,城市,我怎麼能選擇每個城市以最小的價格上城

price | hotel_id | city_id 
10 | 1  | 1 
13 | 4  | 2 
44 | 7  | 3 
... 

SELECT MIN(price) price, hotel_id, city_id FROM (
SELECT MIN(room_price1) price, hotel_id, city_id 
    FROM Hotel 
    JOIN Room USING(hotel_id) 
     JOIN City USING(city_id) 
    LEFT JOIN Service_hotel_option USING (hotel_id) 
    WHERE room_price1 > 0 
     GROUP BY hotel_id 
    ORDER BY price ASC) t 
GROUP BY city_id 
ORDER by city_name, price 

一個房間用最少的價格和它的hotel_id,但我不知道。

回答

1

如何:

SELECT price, hotel_id, city_id 
FROM hotel 
INNER JOIN room AS r1 USING (hotel_id) 
WHERE NOT EXISTS (SELECT 1 FROM room AS r2 
    WHERE r2.hotel_id = r1.hotel_id AND r2.price < r1.price) 

這隻會選擇hotel INNER JOIN room行,如果沒有房間被發現有更低的價格。

+0

我在這裏對架構進行了一些推論,因此您可能需要調整您如何檢查房間是否位於同一家酒店,或者您要調低房間價格。重要的部分是'哪裏不存在(更便宜的房間)' – VoteyDisciple 2011-04-13 13:50:39

+1

我需要一個城市的房間。這個查詢返回每個酒店的最低房價?沒有城市 此查詢到相同的選擇 MIN(價格),HOTEL_ID,city_id從酒店 \t JOIN的房間內使用(HOTEL_ID) GROUP BY HOTEL_ID – eugenes 2011-04-13 13:56:18

+1

因此,加入到城市了。就像我說的那樣,無論你最終在「WHERE NOT EXISTS」中選擇哪一個符合你所期望的「較低價格」的定義。 – VoteyDisciple 2011-04-13 13:59:27