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
连接。
我需要一些帮助来确保我在 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
连接。