логическое ИЛИ в MySQL - PullRequest
       66

логическое ИЛИ в MySQL

2 голосов
/ 26 марта 2012

Как создать условие с логическим ИЛИ в SQL (MySQL), чтобы подусловия выполнялись по мере необходимости?Например:

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

`a` ЛОЖНО`b` это ИСТИНА`c` ЛОЖЬ или ИСТИНА

Я хочу MySQL:1) получить `a` // хорошо,` a` - ЛОЖЬ2) if (`a` IS TRUE) перерыв // без перерыва3) получить `b` // хорошо,` b` ИСТИНА4) если (`b` IS TRUE) перерыв;// хорошо, перерыв

Ответы [ 3 ]

1 голос
/ 26 марта 2012

Логический OR уже ведет себя таким образом.

Однако то, что считается оценкой этих выражений, не обязательно соответствует ожиданиям, например, базе данных все равно может потребоваться извлечь все строки, связанные с выражением.В частности, MySQL не всегда может использовать индексы, если вы используете OR.

Кстати: вам следует использовать OR, который является стандартным синтаксисом SQL.|| в ANSI SQL (другие базы данных и режим ANSI в MySQL) объединяет строки.

0 голосов
/ 26 марта 2012

Чтобы получить то, что вы хотите, вам просто нужно изменить порядок своих операндов.Как только операнд OR равен TRUE, условие больше не оценивается.Чтобы достичь высокой производительности, вы должны поместить операнды, которые, скорее всего, являются истинными, перед остальными.

Вам не нужен разрыв, если a ИСТИНА?Попробуйте для начала:

SELECT * FROM `mytable` WHERE `c` OR `b` OR `a`
0 голосов
/ 26 марта 2012

Если они являются логическими полями, попробуйте использовать это

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