gpt4 book ai didi

sql - 我如何强制 SQL Server 2005 在 where 之前运行连接?

转载 作者:行者123 更新时间:2023-12-02 15:42:19 26 4
gpt4 key购买 nike

我有一个 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 子句并抛出错误:

Conversion failed when converting the varchar value 'TEST' to data type 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 或使用另一种技术来过滤掉我需要的记录?

最佳答案

尝试“重新措辞”查询如下:

SELECT *
FROM (
SELECT JobQuestion.Value,
Price.Min,
Price.Max,
Price.Amount
FROM Price
INNER
JOIN JobQuestion
ON Price.QuestionFK = JobQuestion.QuestionFK
AND JobQuestion.JobFK = 1
) SQ
WHERE SQ.Min <= SQ.Value
AND SQ.Max >= SQ.Value

根据 Christian Hayter 的回答,如果您有选择,请更改表格设计 =)

关于sql - 我如何强制 SQL Server 2005 在 where 之前运行连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1644092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com