查询返回意外值

时间:2015-12-10 07:25:32

标签: mysql

SELECT * 
        FROM workshop_planning_history
        WHERE STATUS =1
        OR STATUS =2
        AND start_date =2015 -11 -29
        OR end_date <=2016 -01 -10
        OR end_date >=2016 -01 -10

我正在运行上面的查询,我期待来自Workshop_planning_history的值,其状态为1或2,但我得到状态为3的结果以及状态为1&amp;的行。 2。 我的查询有什么问题请帮忙......

3 个答案:

答案 0 :(得分:1)

您必须在谓词中添加一些括号,因为运算符的优先级为NOT AND OR,因此您的查询被解释为:

SELECT * 
    FROM workshop_planning_history
    WHERE STATUS = 1
          OR (STATUS = 2 AND start_date = '2015-11-29')
          OR end_date <= '2016-01-10'
          OR end_date >= '2016-01-10'

更改为:

SELECT * 
    FROM workshop_planning_history
    WHERE (STATUS = 1 OR STATUS = 2)
          AND (start_date = '2015-11-29'
               OR end_date <= '2016-01-10'
               OR end_date >= '2016-01-10')

根据你的逻辑,或者适当的东西。

答案 1 :(得分:0)

正确的方法是使用in的{​​{1}}子句。

文档Here

status

如果同时使用SELECT * FROM workshop_planning_history WHERE STATUS in (1,2) AND start_date =2015 -11 -29 和&amp; <=运营商?

答案 2 :(得分:0)

你需要在状态和日期比较的状态和日期之间添加肠胃切除术,在比较日期时最好使用日期修饰符

>=