2015-03-13 1 views
0

Я хочу знать, есть ли способ слияния not in() с like или подстановочный код * в MySQL? Как в следующем запросе:Комбинация Не в и как функция в запросе mysql

select sl_tags from tablname 
    where `sl_tags` not in ('%Soccer%','%Football%','%Hockey%','%shinny%','%Basketball%','%Volleyball%','%Cricket%') 

вышеуказанный запрос не работает.

Я знаю, что это работает

select sl_tags from tablname where `sl_tags` Not like '%Soccer%' and `sl_tags` Not like '%Football%' 

Я видел предыдущие вопросы и ответы на стеке, которые задают, и не нашли каких-либо соответствующих ответов.

ответ

0

Нет, такого оператора нет.

Но вы можете сделать это в несколько иной манере, используя Regular Expressions

SELECT sl_tags 
    FROM tablname 
    WHERE sl_tags NOT REGEXP 'Soccer|Football|Hockey|shinny|Basketball'; 

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

+0

Спасибо @ Barmaley.exe, я нашел что-то вроде этого. – Von

0

Нет, но вы можете использовать not like:

select sl_tags 
from tablname 
where sl_tags Not like '%Soccer%', and 
     sl_tags Not like '%Football%' and 
     sl_tags Not like '%Hockey%', and 
     sl_tags Not like '%shinny%' and 
     sl_tags Not like '%Basketball%' and 
     sl_tags Not like '%Volleyball%' and 
     sl_tags Not like '%Cricket%'; 

Вы не предоставляют информацию, но имена столбцов показывают, что вы храните списки тегов в sl_tags колонке. Это не лучший подход. У вас должна быть отдельная таблица, содержащая один тег в строке в исходных данных. Тогда запрос на таблицу соединений будет проще.

+0

Гордон, я упомянул этот вопрос в вопросе и работал хорошо, но мой вопрос, то есть я хочу, чтобы другой способ получить тот же результат. Некоторые другие операторы такие, как: Не ЛЮБЫЕ (ARRAY ['% xyz%', '% abc%']) – Von