【问题标题】:Operator AND is not function property [closed]运算符 AND 不是函数属性
【发布时间】:2013-02-28 20:13:36
【问题描述】:

我正在像这样在 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 工作不正常
  • @Lamak 是的。似乎这更有可能是操作顺序的问题
  • 我同意@Lamak 的观点,但我会说得更强烈一些......不是“非常非常有可能”,而是……“绝对肯定”
  • @user1991662 这几乎可以肯定是您的数据或查询中的异常。您能否在问题中显示 ACTUAL 数据和 ACTUAL 查询以重现问题?
  • @user1991662 你得到了什么?我很困惑,头很冷,所以我无法真正破译。向我们提供架构、数据、所有条件以及您希望结果集的样子。

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


【解决方案1】:

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

只有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 operator precedence,您会发现 AND 的计算早于 OR。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      相关资源
      最近更新 更多