2013-07-04 50 views
0

带回只有最低的价格,我有两个MSSQL表如下:SQL查询 - 加入两个表从表2

boat_data 

boat_prices 

船约船只数据的数据房子行。每艘船都有一个独特的编号(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 

回答

2

是这样的:

select boat_data.*, 
     t.min_price 
from boat_data 
    join (
    select pricingref, min(price) as min_price 
    from boat_prices 
    group by pricingref 
) t on t.pricingref = boat_data.pricingref; 
+1

哦,你的速度快,+++:在这种情况下d – mirkobrankovic

+0

他将只得到价格在 “早晨” 事业他们是最低的,他说最低的 – mirkobrankovic

+0

@mirkobrankovic:这就是杰森要求的:“*只带回每艘船的最低价格*”。 –

0

可能:

SELECT bp.price, 
     bd.* 
FROM boat_data bd 
JOIN boat_prices bp ON bd.pricingRef = bp.pricingRef 
WHERE bp.price = (SELECT MIN(bp2.price) 
        FROM boat_prices bp2 
        WHERE bp2.pricingRef = bd.pricingRef) 
ORDER BY bp.price