価格表をユーザー提供の回答を含む表に結合する SQL クエリがあります。私のクエリは、入力された数量に基づいて価格を取得するために使用されます。以下は私のSQL文です:
SELECT JobQuestion.Value, Price.Min, Price.Max, Price.Amount FROM Price
INNER JOIN JobQuestion
ON Price.QuestionFK=JobQuestion.QuestionFK
AND JobQuestion.JobFK=1
WHERE Price.Min <= JobQuestion.Value
AND Price.Max >= JobQuestion.Value
問題は、SQL Server が JOIN の前に where 句を実行していて、エラーがスローされていることです。
varchar 値 'TEST' をデータ型 int に変換するときに変換に失敗しました。
結合の前に最小値と最大値の比較を行っているためです ('TEST' は、JobQuestion テーブルにユーザーが入力した有効な値ですが、JobQuestion が Price に結合されている場合は返されません)。SQL Server が WHERE を実行することを選択しているのは、パーサーが何らかの理由でそれがより効率的なクエリであると考えているためだと思います。もし私がただ走るなら
SELECT JobQuestion.Value, Price.Min, Price.Max, Price.Amount FROM Price
INNER JOIN JobQuestion
ON Price.QuestionFK=JobQuestion.QuestionFK
AND JobQuestion.JobFK=1
これらの結果が返されます:
500 1 500 272.00
500 501 1000 442.00
500 1001 2000 782.00
したがって、WHERE を追加すると、最後の 2 つのレコードが除外され、最初のレコードだけが返されます。SQL に最初に JOIN を実行させるか、別の手法を使用して必要なレコードだけを除外するにはどうすればよいですか?