-8

我正在 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
4

2 回答 2

4

尽管您的帖子中信息不完整,但我仍将对此进行尝试。

仅运算符链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。

此外,如果您发布您的实际查询,我们可以在我们的帮助中更具体地了解问题的确切位置。

于 2013-02-28T20:48:03.710 回答
0

可能是您的语法不正确,导致将“AND”应用于每个谓词的谓词的一侧 - 例如,('123' AND column2) 将返回 true,除非 column2 为 0(false) 或 Null。您可以尝试将谓词括在括号中 - 至少这可能会导致 SQL Server 抛出错误,将您指向正确的方向。

于 2013-02-28T20:47:54.577 回答