Логические операторы MySQL - PullRequest
2 голосов
/ 27 марта 2009

Учитывая запрос 'SELECT foo FROM bar WHERE a = x AND b = y OR c = z', как он анализирует этот запрос?

(a = x AND b = y) OR c = z?
a = x AND (b = y OR c = z)

Это простой пример, но что если вы смешиваете и сопоставляете И / ИЛИ с еще большим количеством поисковых запросов?

Ответы [ 4 ]

5 голосов
/ 27 марта 2009
3 голосов
/ 27 марта 2009

Как уже отвечено, AND будет иметь приоритет и будет проанализирован первым.

Я думаю, что ответ, который вы действительно ищете здесь: не пишите запрос как SELECT foo FROM bar WHERE a = x AND b = y OR c = z.

Если вы имеете в виду SELECT foo FROM bar WHERE ((a = x AND b = y) OR c = z) или хотели иметь SELECT foo FROM bar WHERE (a = x AND (b = y OR c = z)), напишите это с самого начала.

Это избавит вас от необходимости разбираться в этом, когда вы снова посмотрите на запрос на следующей неделе (или в месяце, или в году), и облегчит работу и для будущих сопровождающих.

1 голос
/ 27 марта 2009

И выше приоритет .

0 голосов
/ 27 марта 2009

из раздела руководства MySQL 11.2.1. Приоритет оператора: http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

И имеет приоритет над ИЛИ. (a = x И b = y) ИЛИ c = z является эквивалентным выражением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...