MySQL中的逻辑OR

时间:2012-03-26 09:57:37

标签: mysql sql conditional-statements logical-operators

如何在SQL(MySQL)中创建具有逻辑OR的条件,以便根据需要执行子条件?

例如:

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

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

我想要MySQL:

1)得到'a` // ok,`a`是假的 2)如果(`a`为TRUE)中断//没有休息
3)得到`b` // ok,`b`为TRUE
4)如果(`b`为TRUE)中断; //好的,打破了

3 个答案:

答案 0 :(得分:1)

逻辑OR已经表现出来了。

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

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

答案 1 :(得分:0)

如果它们是布尔字段请尝试使用此

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

答案 2 :(得分:0)

要获得你想要的东西,你只需重新排序你的操作数。很快,由于OR的操作数为TRUE,因此不再进一步评估条件。要实现高性能,必须将最可能的操作数放在其他操作数之前。

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

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