AND OR 两边的括号

Parenthesis around AND OR

我需要一些帮助来确保我在 SQL SERVER 中的 AND OR 语句周围正确使用括号。

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)

当我在第二行 AND 代码上方添加括号时,它还会提取其他值,例如示例 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。

首先,对于您的查询,编写逻辑的一种更简洁的方法是使用 in:

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)
      )

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