AND OR周围的括号

时间:2015-05-22 09:56:07

标签: sql sql-server parentheses

我需要一些帮助来确保我在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条符合条件的数据。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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连接。