У меня есть 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 выполняет предложение where перед JOIN и выдает ошибку:
Преобразование не удалось при преобразовании
значение varchar 'TEST' для типа данных int.
потому что он выполняет сравнение min и max перед объединением ('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 должно отфильтровать последние два и просто вернуть первую запись. Как заставить SQL запустить сначала JOIN или использовать другую технику для фильтрации только нужных мне записей?