2012-03-26 86 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`