Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WHERE子句中的SQL多个条件(AND、OR)产生不正确的结果_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

WHERE子句中的SQL多个条件(AND、OR)产生不正确的结果

WHERE子句中的SQL多个条件(AND、OR)产生不正确的结果,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我只想从返回日期差异超过15天的表中返回一个列表。它只返回RequestStatus=1的位置,而不返回RequestStatus=2的位置 我的问题是: SELECT * FROM User WHERE RequestStatus = 1 OR RequestStatus = 3 AND (DATEDIFF(DAY, GETDATE(), TaskCompletionDate)) > 15 使用SQLIN子句为WHERE条件中的RequestStatus列指定所有合法

我只想从返回日期差异超过15天的表中返回一个列表。它只返回RequestStatus=1的位置,而不返回RequestStatus=2的位置

我的问题是:

SELECT * 
FROM User 
WHERE RequestStatus = 1 
   OR RequestStatus = 3 
  AND (DATEDIFF(DAY, GETDATE(), TaskCompletionDate)) > 15
使用SQLIN子句为WHERE条件中的RequestStatus列指定所有合法值,如

Select * 
from User 
Where RequestStatus in (1,2,3)
and (DATEDIFF(day, getdate(), TaskCompletionDate))> 15
试试这个:

Select * from User Where (RequestStatus=1 or RequestStatus=3) and (DATEDIFF(day, getdate(), TaskCompletionDate))> 15

我建议将问题写为:

select *
from User
Where RequestStatus in (1, 2, 3) and
      TaskCompletionDate > DATEADD(day, 15, getdate()) 

通过将TaskCompletionDate移到日期函数之外,您可以为SQL Server提供更多优化查询的机会,例如,如果索引可用且合适,可以使用索引。

+1。如果你把解释的重点放在如何组合几个条件和IN的使用上,可能会对问题OP更有帮助;优化也很重要,但目前可能不是OP的主要关注点。非常感谢详细的答案+1@Gordon我只解决了括号问题,但他优化了查询。。。。对不起,我在你的答复中没有多少名气可写