我正在 SQL Server 中创建一个过程,如下所示:
select
column1,
column2...
from
table
where
column1 = abc
and column2 = 245
and condition3
and condition4
但是SELECT
选择失败条件的值,我需要限制选择。例如:
column1 column2
abc 123
cdf 245
ghi 678
我正在 SQL Server 中创建一个过程,如下所示:
select
column1,
column2...
from
table
where
column1 = abc
and column2 = 245
and condition3
and condition4
但是SELECT
选择失败条件的值,我需要限制选择。例如:
column1 column2
abc 123
cdf 245
ghi 678
尽管您的帖子中信息不完整,但我仍将对此进行尝试。
仅运算符链AND
将要求每个表达式对返回的每一行都评估为真。这与重力一样基本。
简而言之,AND
有效,但它并没有像您期望的那样工作。
这里可能发生的情况是您的查询中有其他您认为与问题无关的表达式。
例如
SELECT Column1,
Column2,
Column3
FROM myTable
WHERE Column1 = 'abc'
AND Column2 = 123
AND column3 = 'zyx'
OR Column3 = 'xyz'
在逻辑上完全不同于:
SELECT Column1,
Column2,
Column3
FROM myTable
WHERE Column1 = 'abc'
AND Column2 = 123
AND (column3 = 'zyx'
OR Column3 = 'xyz')
在第一个示例中,普遍接受的操作顺序会将您的查询评估为
(Column1 = 'ABC AND Column2 = 123 AND column3 = 'zyx')
意味着以上所有内容都必须是真实的
OR Column3 = 'xyz'
在情况 1 中,无论AND
操作评估是否为真,都将返回 column3 等于 'xyz' 的任何行。如果 and 操作或 OR 操作为真,你说给我一行。
如果您希望 SQL 以不同方式评估您的表达式,则需要使用括号指定优先级,如案例 2 所示。
有关更多信息,请查看msdn 运算符优先级,您会看到 AND 的计算早于 OR。
此外,如果您发布您的实际查询,我们可以在我们的帮助中更具体地了解问题的确切位置。
可能是您的语法不正确,导致将“AND”应用于每个谓词的谓词的一侧 - 例如,('123' AND column2) 将返回 true,除非 column2 为 0(false) 或 Null。您可以尝试将谓词括在括号中 - 至少这可能会导致 SQL Server 抛出错误,将您指向正确的方向。