【问题标题】:logical OR in MySQLMySQL中的逻辑或
【发布时间】:2012-04-09 20:03:00
【问题描述】:

如何在 SQL (MySQL) 中用逻辑 OR 建立条件,使子条件按需执行?

例如:

SELECT * FROM \`mytable\` WHERE (\`a\` || \`b\` || \`c\`)

`a` 为假
`b` 为真
`c` 为 FALSE 或 TRUE

我要 MySQL:

1) 获取 `a`                               // 好的,`a` 是 FALSE
2) if (`a` IS TRUE) break       // 不中断
3) 得到 `b`                             // 好的,`b` 是 TRUE
4) if (`b` IS TRUE) 中断; // 好的,打破

【问题讨论】:

  • 看你问题的最后一部分,你是在问表达式a OR b OR cshort-circuits吗?

标签: mysql sql conditional-statements logical-operators


【解决方案1】:

要得到你想要的,你只需要重新排序你的操作数。只要 OR 的操作数为 TRUE,就不会进一步评估条件。要获得高性能,您必须将最有可能为真的操作数放在其他操作数的前面。

如果a 为真,您不想休息吗?试试这个:

SELECT * FROM `mytable` WHERE `c` OR `b` OR `a`

【讨论】:

    【解决方案2】:

    如果它们是布尔字段尝试使用这个

    SELECT * FROM `mytable` WHERE `a` OR `b` OR `c`
    

    【讨论】:

    • 我的c 是子查询(SELECT * FROM mytable2 WHERE ... LIMIT 1)
    【解决方案3】:

    逻辑 OR 已经这样做了。

    但是,对这些表达式的评估不一定​​是您所期望的,例如数据库可能仍需要获取与表达式相关的所有行。具体来说,MySQL can't always use indexes if you use OR

    顺便说一句:您应该使用OR,这是标准的 SQL 语法。 ANSI SQL(其他数据库和 MySQL 中的 ANSI 模式)中的 || 连接字符串。

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2011-10-15
      • 1970-01-01
      相关资源
      最近更新 更多