Как добавить несколько «НЕ НРАВИТСЯ»%?% 'В предложении WHERE sqlite3? - PullRequest
33 голосов
/ 11 ноября 2011

У меня есть запрос sqlite3, например:

SELECT word FROM table WHERE word NOT LIKE '%a%';

Это выберет все слова, в которых слово "a" не встречается.Это я могу получить на работу отлично.Проблема в том, что если я захочу еще больше ограничить результаты, чтобы они не включали слово «b» в слова.Я представляю что-то вроде этого.

SELECT word FROM table WHERE word NOT IN ('%a%', '%b%', '%z%');

, которое, очевидно, не работает, но это идея.Я стараюсь избегать простого добавления предложения AND:

SELECT word FROM table WHERE word NOT LIKE '%a%' AND NOT LIKE '%b%';

Если это единственный вариант, мне придется с этим поработать, но я надеялся на что-то еще.

Ответы [ 7 ]

57 голосов
/ 11 ноября 2011
SELECT word FROM table WHERE word NOT LIKE '%a%' 
AND word NOT LIKE '%b%' 
AND word NOT LIKE '%c%';
15 голосов
/ 11 ноября 2011

Если вы используете поддержку Sqlite REGEXP (см. Ответ на Проблема с регулярным выражением Python и sqlite , как это сделать), то вы можете легко сделать это в одном предложении:

SELECT word FROM table WHERE word NOT REGEXP '[abc]';
6 голосов
/ 04 октября 2016

Вы пропустили второе утверждение: 1) НЕ НРАВИТСЯ А, И 2) НЕ НРАВИТСЯ Б

SELECT word FROM table WHERE word NOT LIKE '%a%' AND word NOT LIKE '%b%'
3 голосов
/ 28 апреля 2016

Ваш запрос будет

SELECT word FROM table WHERE word NOT LIKE '%a%' AND word NOT LIKE '%b%'
2 голосов
/ 18 февраля 2019

это команда выбора

   FROM
    user
WHERE
    application_key = 'dsfdsfdjsfdsf'
        AND email NOT LIKE '%applozic.com'
        AND email NOT LIKE '%gmail.com'
        AND email NOT LIKE '%kommunicate.io';

эта команда обновления

 UPDATE user
    SET email = null
    WHERE application_key='dsfdsfdjsfdsf' and  email not like '%applozic.com' 
    and email not like '%gmail.com'  and email not like '%kommunicate.io';
2 голосов
/ 11 ноября 2011

Я не уверен, почему вы избегаете предложения AND .Это самое простое решение.

В противном случае вам потребуется выполнить INTERSECT нескольких запросов:

SELECT word FROM table WHERE word NOT LIKE '%a%'
INTERSECT
SELECT word FROM table WHERE word NOT LIKE '%b%'
INTERSECT
SELECT word FROM table WHERE word NOT LIKE '%c%';

В качестве альтернативы, вы можете использовать регулярное выражение, если вашверсия SQL поддерживает это.

1 голос
/ 31 января 2015

Если у вас возникли проблемы с запросом «не нравится», учтите, что в базе данных может содержаться ноль.В этом случае используйте:

IFNULL(word, '') NOT LIKE '%something%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...