Sql 和或周围的括号

Sql 和或周围的括号,sql,sql-server,parentheses,Sql,Sql Server,Parentheses,我需要一些帮助,以确保在SQL SERVER中正确使用括号括住AND或语句 SELECT DISTINCT * FROM Table WHERE yearmonth = 201404 AND (HasA = 1 OR HasB = 1 OR hasC = 1) AND (HasAX = 10 OR HasBX = 10 OR HasCX = 10) 当我的第二行代码上面有括号时,它还会提取其他值,比如HasCX=23 具有讽刺意味的是,这一行代码运行良好: AND (HasA = 1 OR

我需要一些帮助,以确保在SQL SERVER中正确使用括号括住AND或语句

SELECT DISTINCT *
FROM Table
WHERE yearmonth = 201404
 AND (HasA = 1 OR HasB = 1 OR hasC = 1)
 AND (HasAX = 10 OR HasBX = 10 OR HasCX = 10)
当我的第二行代码上面有括号时,它还会提取其他值,比如HasCX=23

具有讽刺意味的是,这一行代码运行良好:

AND (HasA = 1 OR HasB = 1 OR hasC = 1)
我应该如何写我的括号围绕这个

AND (HasAX = 10 OR HasBX = 10 OR HasCX = 10)

它应该只提取满足条件10的数据。

我认为您的查询是正确的。检查您的数据。一行可以有HasCx=23,但也可以有HasBX=1

首先,对于您的查询,编写逻辑的更简洁方法是在中使用

SELECT DISTINCT *
FROM Table
WHERE yearmonth = 201404 AND
      1 IN (HasA, HasB, HasC) AND
      10 IN (HasAX, HasBX, HaxCX)
我怀疑你真正想要的是:

WHERE yearmonth = 201404 AND
      ((HasA = 1 AND HasAZ = 10) OR
       (HasB = 1 AND HasBZ = 10) OR
       (HasC = 1 AND HasCZ = 10)
      )

或者,您可能希望所有这些都通过
连接,而不是

((HasA=1或HasB=1或hasC=1)和(HasAX=10或HasBX=10或HasCX=10))连接
HasAX和HasBX
中对于
HasCX=23
的值是什么?规则是:不带括号,这个问题可能会更清楚,有了一些样本数据和您的预期结果(包括一些当前在您给定的尝试中无法正常工作的样本数据)@dataaddicted,您能描述一下您想从数据库中提取什么吗?谢谢,但它仍然提供我的其他产品。让我解释一下。我有HasA或HasB或HasC作为吸引拥有其中一种产品的客户的方法。我不能在每个HasA、HasB和HasC之后使用和,因为它将吸引所有拥有这三种产品的客户。选择HasAZ和so是因为他们必须在一个特定的平台上,比如说光纤。即使有了你的代码,它仍然在挑选coax。