2012-03-26 26 views
2

Wie man eine Bedingung mit logischem ODER in SQL (MySQL) macht, damit die Unterbedingungen auf einer Bedarfsbasis ausgeführt werden?

Zum Beispiel:
logisches ODER in MySQL

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

`a` FALSCH
'b' TRUE ist
'c' falsch oder wahr ist

ich MySQL wollen:

1) get `a`                                                                   // ok, `a` FALSCH
2) if (` a` IS TRUE) Pause                 // keine Pause
3) erhalten 'b'                                                               // ok, `b` ist TRUE
4) wenn (` b` IST WAHR) bricht;                 // ok, brechen verhält

+2

im letzten Teil Ihrer Frage suchen, sind Sie gefragt werden, ob der Ausdruck 'A oder B oder c '[Kurzschlüssen] (http://stackoverflow.com/questions/ 6960767/do-modern-dbms-include-Kurzschluss-Boolesche-Auswertung)? – onedaywhen

Antwort

1

Logical OR bereits auf diese Weise.

Was jedoch als Bewertung dieser Ausdrücke betrachtet wird, ist nicht unbedingt das, was Sie erwarten, z. Die Datenbank muss möglicherweise noch alle Zeilen abrufen, die sich auf den Ausdruck beziehen. Genauer gesagt, MySQL can't always use indexes if you use OR.

BTW: Sie sollten OR verwenden, die eine Standard-SQL-Syntax ist. || in ANSI SQL (andere Datenbanken und ANSI-Modus in MySQL) verkettet Zeichenfolgen.

0

Wenn sie boolean Felder Versuchen Sie es mit diesen

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

meine 'c' ist Unterabfrage (SELECT * FROM' mytable2' WHERE ... LIMIT 1) – user1292621

0

Um sind, was Sie wollen, müssen Sie nur noch Ihre Operanden neu anordnen. Sobald ein Operand von OR TRUE ist, wird die Bedingung nicht weiter ausgewertet.Um eine hohe Leistung zu erreichen, müssen Sie die Operanden, die am wahrscheinlichsten wahr sind, vor die anderen setzen.

Sie möchten keine Pause, wenn a TRUE ist? Versuchen Sie, diese für einen Start:

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