【发布时间】:2018-08-03 02:48:53
【问题描述】:
下面的 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|
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
您确定异常输出吗? 20.02.2018 晚于 13.02.2018(23.02.2018 - 10 天)。第 1 行更适合您的情况。
-
正确。已更新。
标签: mysql sql conditional-statements parentheses operator-precedence