我有一个 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 应该过滤掉最后两个并只返回第一条记录。如何强制 SQL 先运行 JOIN 或使用另一种技术过滤掉我需要的记录?