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