Consulta SQL em que o campo NÃO contém $ x


132

Eu quero encontrar uma consulta SQL para encontrar linhas em que o campo1 não contém $ x. Como posso fazer isso?


Posso usar a função CONTAINS () (sql) para fazer a mesma verificação?
Kate

Respostas:


291

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

1
o que é xb? suas cartas são muito, muito confusas. Eu recomendo usar tabela ou campo.
WhiteCat

Certifique-se de que, se você usar uma subconsulta, NOT INnenhum 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;
Bacon Bits

17

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Certifique-se de escapar $ x corretamente corretamente para evitar a injeção de SQL)

Editar: NOT INfaz 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.


O que é considerado escapar corretamente? Eu sei que com cordas normais você só precisa escapar de algumas coisas, mas o LIKE tem alguns caracteres especiais extras.
Pieter Bos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.