MySQL AND条件括号不起作用

时间:2018-02-23 04:35:21

标签: mysql sql conditional-statements parentheses operator-precedence

以下select语句不会返回正确的结果,尽管周围的括号过于频繁:

SELECT * FROM Table A where (refId != <some refId> and date <= (now() - INTERVAL 10 DAY))

似乎AND条件由于某种原因而短路,这意味着如果refId确实等于所讨论的refId,则日期无关紧要。此语句需要返回没有问题refId的行,但前提是date条件也匹配。

例如,我有很多refIds,但我想过滤其中一个,但仅当date也在10天窗口之外时。

Sample Data:                                 Expected Results:
-----------                                  -----------------
|id|refId|   date   |       refId != 5 AND date <= (now() - INTERVAL 10 DAY)
|1 | 1   | 2018-2-10|               Only row 1 should be returned since the
|2 | 5   | 2018-2-14|              refId !=5 AND the date is <= 10 days ago.
|3 | 2   | 2018-2-20|
|4 | 5   | 2018-2-22|
|5 | 5   | 2018-2-12|

1 个答案:

答案 0 :(得分:0)

我认为您需要=or

SELECT *
FROM Table A
WHERE (refId = <some refId> OR date <= (now() - INTERVAL 10 DAY))