次のように 2 つの MSSQL テーブルがあります。
boat_data
boat_prices
ボート データには、ボートに関するデータの行が格納されています。各ボートには一意の ID (pricingRef) があります。ボートの価格には、各ボートのレンタル価格の行が格納されており、ボートごとに任意の数の行を含めることができます。各行には、pricingRef 値もあります。Boat_prices テーブルのデータの例は次のとおりです。
pricingRef > pricingDescription > price
ASD1 > fullDay > 1500
ASD1 > perWeek > 9000
ASD1 > morning > 800
ASD2 > fullDay > 2000
ASD2 > perWeek > 12000
ASD2 > morning > 1100
私がする必要があるのは、boat_data テーブルからすべての行を戻し、それを boat_prices テーブルに結合して、各ボートの最低価格のみを戻すことです。以下に動作するSQL文を書きました。問題は、それが本当に不格好で散らかっていることです。min(price) を使用して、boat_prices テーブルから価格値を取得し、boat_data テーブルの各フィールドを明示的に要求してから、boat_data テーブルのすべてのフィールドでグループ化しました。
これを達成するためのより良い方法があるはずです。申し訳ありませんが、私は SQL の初心者です。助けてください!
select
min(price) as price,
boat_data.ID,
boat_data.boatRef,
boat_data.capacity,
boat_data.sleeps,
boat_data.fuelConsumption,
boat_data.yearBuilt,
boat_data.length,
boat_data.beam,
boat_data.engines,
boat_data.tender,
boat_data.boatName,
boat_data.cabins,
boat_data.speed,
boat_data.location,
boat_data.onSale,
boat_data.supplierID,
boat_data.boatClassID,
boat_data.pricingRef,
boat_data.crew,
boat_data.sportsEquipment
from boat_data
join boat_prices
on boat_data.pricingRef = boat_prices.pricingRef
group by
boat_data.ID,
boat_data.boatRef,
boat_data.capacity,
boat_data.sleeps,
boat_data.fuelConsumption,
boat_data.yearBuilt,
boat_data.length,
boat_data.beam,
boat_data.engines,
boat_data.tender,
boat_data.boatName,
boat_data.cabins,
boat_data.speed,
boat_data.location,
boat_data.onSale,
boat_data.supplierID,
boat_data.boatClassID,
boat_data.pricingRef,
boat_data.crew,
boat_data.sportsEquipment
order by price