SELECT ProductID, MIN(Price) MinPrice
FROM Product JOIN ProductVariant ON Product.ProductID = ProductVariant.ProductID
GROUP BY ProductID
Это дает вам минимальную цену.Если вам нужен VariantID, который идет с ним, вам нужно присоединиться еще раз - НО цена уникальна для VariantID?
SELECT VariantID, ProductID, MinPrice
FROM ProductVariant JOIN
(SELECT ProductID, MIN(Price) MinPrice
FROM Product JOIN ProductVariant ON Product.ProductID = ProductVariant.ProductID
GROUP BY ProductID) min_price
ON ProductVariant.ProductID = min_price.ProductID AND ProductVariant.Price = min_price.MinPrice
Если цена не уникальна для варианта, это не будет работать правильно -в частности, вы получите дубликаты.Если это произойдет, вы можете изменить его на:
SELECT MIN(VariantID) SmallestVariantID, ProductID, MinPrice
FROM ProductVariant JOIN
(SELECT ProductID, MIN(Price) MinPrice
FROM Product JOIN ProductVariant ON Product.ProductID = ProductVariant.ProductID
GROUP BY ProductID) min_price
ON ProductVariant.ProductID = min_price.ProductID AND ProductVariant.Price = min_price.MinPrice
GROUP BY ProductID, MinPrice
Это выберет наименьший идентификатор варианта из дубликатов.