【问题标题】:MySQL Multiple Where Conditions, Results Do Not Meet All ConditionsMySQL多个where条件,结果不满足所有条件
【发布时间】:2019-02-28 04:31:21
【问题描述】:

我有一个从 expressJS 注入 MySQL 的查询,但是当这些查询被执行时。有时我返回的数据不正确满足条件。


原文:

SELECT * FROM table
  WHERE status = 'Invoiced'
  AND (ordereddate between '2009-12-01' AND '2011-12-30')
  OR (duedate between '2009-12-01' AND '2011-12-30');

结果:

Ordered Date   Due Date      Status
2009-11-18     2009-12-16    Invoiced
2009-11-18     2009-12-14    Cancelled

结果显示任何状态的项目正在被拉取,但满足日期条件。


试过了:

SELECT * FROM table
  WHERE (status = 'Invoiced')
  AND (ordereddate between '2009-12-01' AND '2011-12-30')
  AND (duedate between '2009-12-01' AND '2011-12-30');

结果: 如果 ordereddateduedate 超出日期范围,则该项目将被排除在结果之外。

改为AND而不是OR


试过了:

SELECT * FROM table
  WHERE status = 'Invoiced'
  AND (ordereddate AND duedate between '2009-12-01' AND '2011-12-30');

结果: 正确返回所有内容,除非 ordereddateduedate 超出日期范围,否则该行将被排除在结果之外。

结合ordereddateduedate where 条件


试过了:

SELECT * FROM table
  WHERE status = 'Invoiced'
  AND (ordereddate OR duedate between '2009-12-01' AND '2011-12-30');

结果:

Ordered Date   Due Date      Status
2008-07-07     2008-07-28    Invoiced
2008-07-07     2008-07-25    Invoiced
2008-07-07     2008-07-23    Invoiced

这个似乎提取了正确的状态,但是日期不正确,它似乎提取了状态为 Invoiced 的任何内容,并且忽略了日期范围。

【问题讨论】:

  • 您的最后两个表达式涉及x AND ...x OR ... - 在每种情况下,x 都会测试真/假(非零/零)以得出一个值。也就是说,它真的不是你需要的。

标签: mysql node.js mariadb where between


【解决方案1】:

如果我正确理解您的问题,您需要使用额外的括号:

SELECT
    *
FROM
    table
WHERE
    status = 'Invoiced'
    AND (
           (ordereddate between '2009-12-01' AND '2011-12-30')
        OR (duedate between '2009-12-01' AND '2011-12-30')
    )
;

【讨论】:

  • 太棒了!这正是它!它现在按预期工作。我会赞成答案,但我没有足够的代表。再次感谢您!
  • @AndrewBaker 我相信你应该能够“接受”答案:)
  • 这是因为ANDOR 具有“优先级”,当您想要x AND (y OR z) 时,尝试实际上是(x AND y) OR z
猜你喜欢
  • 1970-01-01
  • 2017-05-12
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多