2014-01-23 3 views
3

У меня проблема с выбором mysql с использованием «не нравится» в тех условиях. В таблице содержится 15 тыс. Записей. Записи 3k имеют значение «test» в столбце col1.mysql не нравится не работает

Это настоящие произведения изобразительного:

select 
    * 
from 
    `table` 
where 
    `col1` like 'test' 

3000 строк, выбранных. Это верно.

Но если я пытаюсь это выбрать:

select 
    * 
from 
    `table` 
where 
    `col1` not like 'test' 

0 строк, выбранных в то время как я ожидаю 12000 строк.

Буду признателен за любые идеи?

+1

Можете ли вы сделать небольшой пример на sqlfiddle? – Barmar

+0

не уверен, но попробуйте два разных querry с похожими на 'col1 like '% test%'' и 'col1 NOT like '% test%'' –

+0

Отлично работает для меня: http://www.sqlfiddle.com/#!2/ 59eb8e/3 – Barmar

ответ

2

Так что я решил. Проблема была в данных, а не в запросе. Я не понял, что условие not like не работает для значения NULL.

http://sqlfiddle.com/#!2/17270/2

2

Если вы делаете точное сравнение, как вы делаете в запросе, вы можете использовать NOT EQUAL

select 
    * 
from 
    `table` 
where 
    `col1` != 'test' 
+0

Спасибо за идею, но это не сработало. Тот же результат из 0 строк. – sajushko

2

Попробуйте

select * from table where col1 NOT LIKE '%test%'; 
+0

Если он делает точное совпадение с 'LIKE', почему он не должен делать точный матч с' NOT LIKE'? – Barmar

+0

Спасибо, но это тоже не сработало. – sajushko

0

попробовать это

SHOW TABLES WHERE col1 NOT LIKE '%test%' 
0

Это может быть отсутствие %

select 
    * 
from 
    `table` 
where 
    `col1` not like '%test%' 

Try без `

select 
    * 
from 
    table 
where 
    col1 not like '%test%' 
+0

Второе решение не будет компилироваться. –

+0

В запросе не будет использоваться какой-либо индекс a, он будет исследовать каждую строку в таблице. Это будет очень медленно. – sajushko

Смежные вопросы