MySQL отрицание как не возвращает то, что ожидалось, почему? - PullRequest
3 голосов
/ 08 июля 2011

У меня есть таблица MySQL, которая имеет 2796 записей.Я хотел бы выбрать записи, которые не содержат слово SUPPR где-нибудь в поле примечаний.

Если я сделаю следующее

SELECT * FROM `catalogues` WHERE notes LIKE "%SUPPR%"

Возвращается 266 строка.Но если я напишу то, что считаю дополнением

SELECT * FROM `catalogues` WHERE notes not LIKE "%SUPPR%"

, то вернется 762 строки, когда я ожидал 2530 (2796-266).

Как мне написать второй запрос, чтобы получить то, что янужно?

1 Ответ

7 голосов
/ 08 июля 2011

Значения Null неявно исключаются при использовании NOT LIKE.
. Вы обрабатываете отдельно:

SELECT * 
  FROM `catalogues` 
 WHERE (notes NOT LIKE "%SUPPR%" 
        OR notes IS NULL);

Возможно, вы использовали его только в иллюстративных целях ...
Администраторы и производительность-буффы рекомендуют не использовать SELECT *.

...