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