运算符AND不是函数属性

时间:2013-02-28 20:13:37

标签: sql sql-server sql-server-2008

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

2 个答案:

答案 0 :(得分:4)

尽管你的帖子中有不完整的信息,我还是会对此进行一次尝试。

只有AND运算符的链将要求每个表达式为返回的每一行计算true。这与引力一样重要。

简而言之,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操作是否为true,都将返回column3等于'xyz'的任何行。如果是和操作或者OR操作都是真的,你就说给我一行。

如果希望SQL以不同方式评估表达式,则需要使用括号指定优先级,如案例2所示。

有关详细信息,请查看msdn operator precedence,您会看到在OR之前很久就会对AND进行评估。

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

答案 1 :(得分:0)

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

相关问题