在sql查询中的where条件中解决常见问题

时间:2014-05-01 16:04:57

标签: sql sql-server

我正在使用sql server

在我的查询中我的条件是这样的:

 WHERE   

       ([status] IN (3,4) AND locid = 6 AND dtime >= getdate()-50)
       OR 
       ([status] = 5 AND DATEDIFF(n, CAST(DelDate AS DATETIME), GETDATE()) <= 3
         AND locid = 6 AND dtime >= getdate()-50)
   ORDER BY  
       paydate

而不是在哪种情况下,我可以将共同因素排除在外吗? 这还会影响我的查询中的其他内容吗? 我可以得到相同的结果吗? 如果我能解决这些共同因素,我该如何重写呢?

1 个答案:

答案 0 :(得分:2)

如果你把共同因素排除在外,你必须正确地使用括号来分隔你的逻辑。它不会影响结果。

虽然数据库引擎非常智能,并且大多数时候数据库引擎的查询优化器会为您优化这种查询,但我对任何学习sql的人的建议是学会以正确的方式学习它。

WHERE
   ( 
       ([status] IN (3,4))
       OR 
       ([status] = 5 AND DATEDIFF(n, CAST(DelDate AS DATETIME), GETDATE()) <= 3)
   )
   AND locid = 6 AND dtime >= getdate()-50