我正在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
答案 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抛出指向正确方向的错误。