私は、重量や国などのいくつかの基準に基づいてデータベースから最も低い値を選択することになっている送料計算機のこのクエリを持っています。クエリは、条件に一致する1つまたは複数のShippingProviderIdの最初の最低値を取得することを目的としています。
問題は、Group byクエリがShippingCostテーブルからの複数の行の結果を混合し、強打からヒンジをスローすることです。 PriceとShippingCostIdを同じ行から取得する必要があります。この結果の混合を防ぐにはどうすればよいですか?おそらくGroup Byは必要なものではないのでしょうか?
SELECT MIN(s1.Price), s1.ShippingCostId, s1.Weight, s2.CoD, s2.Artnr, s2.CoD,
s2.Regular, s2.ShippingProviderId, s3.ProviderName FROM ShippingCost s1
INNER JOIN ShippingProvider s2 ON s1.ShippingProviderId = s2.ShippingProviderId
INNER JOIN ShippingProviderTranslations s3 ON (s2.ShippingProviderId = s3.ShippingProviderId AND s3.Language = 'xx')
WHERE CountryId = 123 AND (Weight >= 0.5 AND Weight <= 50) AND s2.Regular = 0
GROUP BY s2.ShippingProviderId
MIN()式を削除すると、行は混合されなくなりますが、最小値はShippingCostIdが高く、後で追加された(主キーである)ため、最小値は見つかりません。重量のMIN()式を追加したり、重量で並べ替えたりすることもできません。さまざまなアプローチを試してみましたが、困惑しています。
助言がありますか?
列でグループ化しないための選択ではなく、最小価格で結合を使用する必要があります
集計関数を使用した列でグループ化されないためのselectの使用は、予測できない結果を生成します
この習慣はSQLでは推奨されず、mysqlの最新バージョンでは許可されず、エラーが発生します