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 cela?

98
demandé sur Aeon 2008-10-24 13:42:11

2 réponses

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, 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 sorte que la chaîne que vous recherchez doit commencer par la chaîne donnée, elle peut utiliser des indices (s'il y a 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%';
218
répondu Vegard Larsen 2008-10-24 11:39:26

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Assurez-vous d'échapper à $x correctement au préalable pour éviter L'injection SQL)

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

14
répondu Greg 2008-10-24 09:45:40