web-dev-qa-db-fra.com

Requête SQL où le champ ne contient pas $ x

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

115
zuk1

Quel genre de domaine 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, optez pour l'opérateur LIKE (mais ce 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 sorte que la chaîne recherchée doit 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%';
247
Vegard Larsen

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Assurez-vous que vous échappez bien $ x auparavant pour éviter une injection SQL)

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

15
Greg