0
SELECT hotel.hotel_id, hotel.hotel_name, hotel.hotel_address, hotel.hotel_pic, 
room_accommodation.room_full_price 
FROM hotel 
INNER JOIN room_accommodation ON (room_accommodation.hotel_id = hotel.hotel_id ) 
INNER JOIN ( 
    SELECT MIN( room_full_price ) AS minPrice 
    FROM room_accommodation INNER JOIN hotel ON ( 
    hotel.hotel_id =room_accommodation.hotel_id ) 
    WHERE hotel.hotel_address LIKE '%bangkok%' 
)room_accommodation ON room_accommodation.room_full_price = room_accommodation.minPrice

この SQL は、各ホテルの最低料金でバンコクにある各ホテルを照会できます。

しかし、問題は、各ホテルの最低料金をすべて照会したいのですが、カットすると

その結果、すべてのホテルの最低価格が 1 つだけ表示された状態

何が間違っていて、これをアーカイブするにはどうすればよいですか

ご意見をお聞かせください

少し早いですがお礼を。

4

2 に答える 2

3

これは非常に単純化できます。必要な結果に基づくサブクエリは必要ありません。

SELECT hotel.hotel_id, 
       hotel.hotel_name, 
       hotel.hotel_address, 
       hotel.hotel_pic, 
       MIN(room_accommodation.room_full_price) as room_full_price 
FROM hotel 
INNER JOIN room_accommodation 
  ON room_accommodation.hotel_id = hotel.hotel_id
  AND hotel.hotel_address LIKE '%bangkok%'
GROUP BY hotel.hotel_id

他の DBMS の場合は、GROUP BY 句で各非集計フィールドを指定する必要があることに注意してください。MySQL を使用すると、良くも悪くもそれなしで済むようになります。

于 2013-05-19T19:20:14.847 に答える
-1

内部クエリ [room_accommodation] に間違ったエイリアスを指定していると思います

あなたのクエリは、room_accommodation という名前のテーブルも持っていることを示しています

SELECT hotel.hotel_id, hotel.hotel_name, hotel.hotel_address, hotel.hotel_pic, 
room_accommodation.room_full_price 
FROM hotel 
INNER JOIN ***room_accommodation*** ON (room_accommodation.hotel_id = hotel.hotel_id ) 
INNER JOIN ( 
    SELECT MIN( room_full_price ) AS minPrice 
    FROM room_accommodation INNER JOIN hotel ON ( 
    hotel.hotel_id =room_accommodation.hotel_id ) 
    WHERE hotel.hotel_address LIKE '%bangkok%' 
)***room_accommodation*** ON room_accommodation.room_full_price = room_accommodation.minPrice
于 2013-05-19T19:21:48.690 に答える