【问题标题】:MySQL AND condition parenthesis not workingMySQL AND 条件括号不起作用
【发布时间】: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


【解决方案1】:

我想你想要=or

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

【讨论】:

  • or 将不起作用,有很多 refIds,我想返回除一个 refId 之外的所有行,其中日期也在 10 天窗口之外。如果我分别测试每个条件,它们工作正常,但我需要条件仅在满足两个条件时才有效。目前,如果一行包含我试图过滤掉的refId,它似乎甚至没有检查第二个条件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 2021-01-21
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
相关资源
最近更新 更多