Объяснение результата MySQL Query - PullRequest
0 голосов
/ 30 ноября 2011

Довольно простой вопрос: почему вывод следующего SQL не равен нулю?

SELECT * FROM table WHERE 
(`FirstName` LIKE 'D%' OR `LastName` LIKE 'D%' OR `City` LIKE 'D%')
AND
(`FirstName` NOT LIKE 'D%' OR `LastName` NOT LIKE 'D%' OR `City` NOT LIKE 'D%')

Я использую MySQL 5.1. Результатом является игнорирование части «НЕ НРАВИТСЯ» все вместе.

Ответы [ 4 ]

2 голосов
/ 30 ноября 2011

Если у вас есть FirstName для «Дэвида», то первое условие в скобках будет истинным. Если у вас LastName для «Смита», то второе условие в скобках будет истинным, и ваш запрос вернет этот результат.

То, что вы, вероятно, хотите делать, примерно так:

SELECT * FROM table WHERE 
(`FirstName` LIKE 'D%' OR `LastName` LIKE 'D%' OR `City` LIKE 'D%')
AND
(`FirstName` NOT LIKE 'D%' AND `LastName` NOT LIKE 'D%' AND `City` NOT LIKE 'D%')

(обратите внимание на OR с, которые были изменены на AND с.)

0 голосов
/ 30 ноября 2011

Вы используете оператор OR в ваших условиях.Таким образом, существует вероятность того, что два различных условия из вышеупомянутых двух выполняются, поэтому вы получите результат, не равный нулю.

0 голосов
/ 30 ноября 2011

Имя = Арунава
Фамилия = Дей
Город = Нью-Йорк

Первая часть верна, потому что LastName LIKE 'D%' верна
Вторая часть соответствует действительности. FirstName НЕ НРАВИТСЯ. 'D%' соответствует действительности
Город может быть любым.

0 голосов
/ 30 ноября 2011

Измените ИЛИ на И с помощью NOT LIKE

(`FirstName` NOT LIKE 'D%' AND `LastName` NOT LIKE 'D%' AND `City` NOT LIKE 'D%')

С ИЛИ, если первое условие истинно, остальные условия не будут проверены, поэтому у вас есть соответствующие строки.

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