我在SQL Server中使用Multiple AND& amp;或者
例如 我的问题是我应该在ProductCode1,ProductCode2和&之间的OR语句中打开和关闭括号。 ProductCode3。
我问的原因是。每次我放置括号并运行查询时,从括号中移除括号时会得到不同的结果吗?
SELECT ProdID,
Productname,
SalesDate,
ProductCode1,
ProductCode2
FROM Product_Table
WHERE SalesDate >= ‘2015-01-01’
AND Productname IN (‘CA’,’DC’,’BF’,’GH’,’TQR’,’VXT’)
AND ProductCode1 IN (232, 878, 287, 986, 672)
OR ProductCode2 IN (213, 543, 971, 435,627)
OR ProductCode3 IN (32, 89,67,45)
答案 0 :(得分:2)
关键字是Operator Precedence ..它定义了运算符的评估顺序。在我知道的SQL方言中(实际上在每种编程语言中),AND运算符的优先级高于OR运算符。但是,可以使用括号来控制运算符的评估顺序:
与您的示例(条件A到E)进行比较时,表达式为:
A AND B AND C OR D OR E
等同于以下表达式:
(A AND B AND C) OR D OR E
这意味着,必须满足下列条件之一:
但根据你的例子,你可能想要这样的东西:
A AND B AND (C OR D OR E)
翻译成您的查询,它看起来像这样:
SELECT ...
FROM Product_Table
WHERE SalesDate >= ‘2015-01-01’
AND Productname IN (‘CA’,’DC’,’BF’,’GH’,’TQR’,’VXT’)
AND (ProductCode1 IN (232, 878, 287, 986, 672)
OR ProductCode2 IN (213, 543, 971, 435,627)
OR ProductCode3 IN (32, 89,67,45))
所以A和B必须为真,C,D或E也必须为真。翻译成你的例子,这看起来像:
例如,这是特定TSQL版本中所有运算符的完整列表及其优先级:https://msdn.microsoft.com/en-us/library/ms190276.aspx
答案 1 :(得分:1)
我猜你的查询的目的是查找SalesDate大于或等于'2015-01-01'的记录,并且在列出的集合中有一个Productname并且有一个productCode字段的值匹配您指定的集合。在这种情况下,您需要使用括号将所有productCode过滤器组合在一起。
SELECT ProdID,
Productname,
SalesDate,
ProductCode1,
ProductCode2
FROM Product_Table
WHERE SalesDate >= ‘2015-01-01’
AND Productname IN (‘CA’,’DC’,’BF’,’GH’,’TQR’,’VXT’)
AND (ProductCode1 IN (232, 878, 287, 986, 672)
OR ProductCode2 IN (213, 543, 971, 435,627)
OR ProductCode3 IN (32, 89,67,45))
这是使用AND和OR运算符的一个非常基本的组件。我很难为你找到一个很好的资源来解释它,但是 [maybe this will help]。1