web-dev-qa-db-fra.com

Comment ajouter plusieurs "NOT LIKE"%?% 'Dans la clause WHERE de sqlite3?

J'ai une requête sqlite3 comme:

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

Cela sélectionnerait tous les mots où "un" ne se produit pas dans la Parole. Cela je peux arriver à travailler parfaitement. Le problème est que si je veux restreindre davantage les résultats pour ne pas inclure "b" dans le mot. Je imagine quelque chose comme ça.

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

qui cela ne fonctionne évidemment pas, mais c'est l'idée. J'essaie d'éviter d'ajouter simplement une clause AND:

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

Si c'est la seule option, je devrai travailler avec cela, mais j'espérais autre chose.

33
Elmer

Si vous utilisez le support REGEXP de Sqlite (voir la réponse à la section Problème avec regexp python et sqlite pour savoir comment faire)), vous pouvez le faire facilement en une clause:

SELECT Word FROM table WHERE Word NOT REGEXP '[abc]';
15
mikel
SELECT Word FROM table WHERE Word NOT LIKE '%a%' 
AND Word NOT LIKE '%b%' 
AND Word NOT LIKE '%c%';
57
laher

Vous avez manqué la deuxième déclaration: 1) pas comme A, et 2) pas comme B

SELECT Word FROM table WHERE Word NOT LIKE '%a%' AND Word NOT LIKE '%b%'
6
Etherlord

c'est une commande select

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

cette commande de mise à jour

 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';
3
Vipin Pandey

La requête que vous recherchez sera

SELECT Word FROM table WHERE Word NOT LIKE '%a%' AND Word NOT LIKE '%b%'
3
David Hallam

Je ne sais pas pourquoi vous évitez les clauses ET . C'est la solution la plus simple.

Sinon, vous devrez faire une INTERSECTION de plusieurs requêtes:

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%';

Vous pouvez également utiliser une expression régulière si votre version de SQL le prend en charge.

2
Raymond Hettinger

Si vous rencontrez des problèmes avec la requête "pas comme", considérez que vous pouvez avoir une valeur null dans la base de données. Dans ce cas, utilisez:

IFNULL(Word, '') NOT LIKE '%something%'
1
Dariusz