Respostas:
Que tipo de campo é esse? O operador IN não pode ser usado com um único campo, mas deve ser usado em subconsultas ou em 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);
Se você estiver procurando uma string, vá para o operador LIKE (mas isso será lento):
-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';
Se você a restringir para que a sequência que você está procurando tenha que começar com a sequência especificada, ela poderá usar índices (se houver um índice nesse campo) e ser razoavelmente rápida:
-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
NOT IN
nenhum dos valores será NULL, pois NOT IN e NULL não serão combinados de maneira óbvia se você não estiver familiarizado com a lógica de três valores. Aqui você usaria SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL);
Se você também precisa de excluir valores NULL, você precisa fazer isso: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%';
(Certifique-se de escapar $ x corretamente corretamente para evitar a injeção de SQL)
Editar: NOT IN
faz algo um pouco diferente - sua pergunta não é totalmente clara, então escolha qual usar. LIKE 'xxx%'
pode usar um índice. LIKE '%xxx'
ou LIKE '%xxx%'
não pode.