Respuestas:
¿Qué tipo de campo es este? El operador IN no se puede usar con un solo campo, pero está destinado a usarse en subconsultas o con listas predefinidas:
-- 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 está buscando una cadena, busque el operador LIKE (pero esto será lento):
-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';
Si lo restringe para que la cadena que está buscando tenga que comenzar con la cadena dada, puede usar índices (si hay un índice en ese campo) y ser razonablemente rápido:
-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
NOT IN
que ninguno de los valores sea NULL, ya que NOT IN y NULL no se combinan de manera obvia si no está familiarizado con la lógica de tres valores. Aquí usaría SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL);
Si también necesita excluir valores NULL, necesitaría hacer esto:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
SELECT * FROM table WHERE field1 NOT LIKE '%$x%';
(Asegúrese de escapar $ x correctamente de antemano para evitar la inyección de SQL)
Editar: NOT IN
hace algo un poco diferente: su pregunta no está totalmente clara, así que elija cuál usar. LIKE 'xxx%'
puede usar un índice. LIKE '%xxx'
o LIKE '%xxx%'
no puedo