mysql - 存储过程返回错误值?

标签 mysql sql sql-server stored-procedures

我有一个存储过程来检查在我的数据库中预订的假期,它不应该考虑状态为“已拒绝”或“已取消”的假期,但我的数据库中只有一个记录拒绝状态但此选择语句返回 1?

        SELECT COUNT(*) JobRoleID
        FROM        Employees
        RIGHT JOIN  Holidays
        ON          Employees.ID = Holidays.EmployeeID
        WHERE       Holidays.Status <> 'Declined' AND Holidays.Status <> 'Cancelled'
        AND        (Holidays.Startdate <= '2014/04/28' AND Holidays.Enddate >= '2014/04/30')
        OR         (Holidays.Startdate >= '2014/04/28' AND Holidays.Enddate <= '2014/04/30') 
        OR         (Holidays.Startdate <= '2014/04/30' AND Holidays.Enddate >= '2014/04/30') 
        OR         (Holidays.Startdate <= '2014/04/28' AND Holidays.Enddate >= '2014/04/28') 
        OR         (Holidays.StartDate = '2014/04/28' AND Holidays.EndDate = '2014/04/30')

最佳答案

这里需要考虑运算符的优先级。

Not -->  AND --> OR 

Not 优先于 AND ,AND 优先于 OR。对于这些嵌套的 AND 和 OR,最好将它们放在括号中。

WHERE       Holidays.[Status] <> 'Declined' AND Holidays.[Status] <> 'Cancelled'
AND    
    (       (Holidays.Startdate <= '2014/04/28' AND Holidays.Enddate >= '2014/04/30')
        OR  (Holidays.Startdate >= '2014/04/28' AND Holidays.Enddate <= '2014/04/30') 
        OR  (Holidays.Startdate <= '2014/04/30' AND Holidays.Enddate >= '2014/04/30') 
        OR  (Holidays.Startdate <= '2014/04/28' AND Holidays.Enddate >= '2014/04/28') 
        OR  (Holidays.StartDate = '2014/04/28' AND Holidays.EndDate = '2014/04/30')
    )

如果在 sql 中使用方括号 [] 时,也请避免使用 Sql server 关键字作为列名。

关于mysql - 存储过程返回错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839415/

相关文章:

SQL累进和

sql-server - 非聚集索引不工作sql server

mysql - 基于session的随机查询结果

mysql - mysql中每行最高x的总和

sql - T-SQL 按条件对数据进行分组

mysql - 需要帮助编写组合两个表的 SQL SELECT 语句

sql-server - 仅更新 DateTime 的日期部分

sql - 如何计算 MySQL 中值的非唯一组合?

mysqlimport:错误:1452

SQL 服务器 : combine maximum result and second largest results in single query