2012-03-26 102 views
2

如何使一个条件与逻辑或SQL(MySQL的),这样子的条件将在需要的基础上进行?

例如:
逻辑或在MySQL

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

`了`是FALSE
`B`是TRUE
`C`是假性还是真性

我想MySQL的:

1)得到`了`                                                                  //正确,`A`是FALSE
2)如果(`A` IS TRUE)破                //没有中断
3)获得`B`                                                               //正确,`B`是TRUE
4)如果(`B` IS TRUE)中断;                 // OK,打破

+2

看看你的问题的最后一部分,你问是否表达式'a或b或c' [短路](http://stackoverflow.com/questions/) 6960767 /做现代的DBMS,包括短路布尔评估)? – onedaywhen 2012-03-26 10:13:51

回答

1

逻辑OR已经表现的方式。

但是什么被认为是那些表达的评价不一定​​是你所期望的,例如数据库可能仍然需要获取与该表达式相关的所有行。具体而言,MySQL can't always use indexes if you use OR

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

0

如果他们是布尔字段使用该

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

我的'c'是子查询(SELECT * FROM'mytable2' WHERE ... LIMIT 1) – user1292621 2012-03-26 10:09:14

0

为了得到你想要的尝试,你就必须重新排列操作数。一旦OR的操作数为TRUE,条件就不会被进一步评估。为了实现高性能,您必须将最可能的操作数置于其他操作数的前面。

如果a为真,你不想休息吗?尝试这一开始:

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