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:
-- subquerySELECT a FROM x WHERE x.b NOTIN(SELECT b FROM y);-- predefined listSELECT a FROM x WHERE x.b NOTIN(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 NOTLIKE'%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 NOTLIKE'text%';
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.
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:
Se você estiver procurando uma string, vá para o operador LIKE (mas isso será lento):
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:
fonte
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ê usariaSELECT 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'
ouLIKE '%xxx%'
não pode.fonte