156 votes

Requête SQL où le champ NE CONTIENT PAS $x

Je veux trouver une requête SQL pour trouver les lignes où field1 ne contient pas $x. Comment puis-je le faire ?

0 votes

Puis-je utiliser la fonction CONTAINS() (sql) pour effectuer la même vérification ?

330voto

Vegard Larsen Points 4850

Quel genre de champ est-ce ? L'opérateur IN ne peut pas être utilisé avec un seul champ, mais est destiné à être utilisé dans des sous-requêtes ou avec des listes prédéfinies :

-- subquery
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y);
-- predefined list
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6);

Si vous recherchez une chaîne de caractères, optez pour l'opérateur LIKE (mais cela sera lent) :

-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';

Si vous le limitez de manière à ce que la chaîne que vous recherchez doive commencer par la chaîne donnée, il peut utiliser des index (s'il existe un index sur ce champ) et être raisonnablement rapide :

-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';

1 votes

qu'est-ce que x.b ? vos lettres sont très très confuses. Je recommande d'utiliser table ou champ.

0 votes

Assurez-vous que si vous utilisez une sous-requête pour NOT IN qu'aucune des valeurs ne sera NULL, car NOT IN et NULL ne se combinent pas de manière évidente. si vous n'êtes pas familier avec la logique à trois valeurs. Ici, vous utiliseriez SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Si vous devez également exclure les valeurs NULL, vous devrez procéder comme suit : SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;

20voto

Greg Points 132247

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Assurez-vous de bien échapper $x au préalable pour éviter toute injection SQL)

Edit : NOT IN fait quelque chose d'un peu différent - votre question n'est pas tout à fait claire, alors choisissez celle que vous voulez utiliser. LIKE 'xxx%' peut utiliser un index. LIKE '%xxx' ou LIKE '%xxx%' ne peut pas.

0 votes

Qu'est-ce qui est considéré comme s'échappant correctement ? Je sais qu'avec les chaînes de caractères normales, il suffit d'échapper quelques éléments, mais LIKE comporte des caractères spéciaux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X