¿Puedo usar la función CONTAINS () (sql) para hacer la misma verificación?
Kate
Respuestas:
291
¿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:
-- 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);
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 NOTLIKE'%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 NOTLIKE'text%';
que es xb Tus cartas son muy muy confusas. Recomiendo usar tabla o campo.
Whitecat
Asegúrese de que si usa una subconsulta para NOT INque 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;
Bacon Bits
17
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 INhace 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
¿Qué se considera escapar adecuadamente? Sé que con las cuerdas normales solo tienes que escapar de algunas cosas, pero LIKE tiene algunos caracteres especiales adicionales.
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:
Si está buscando una cadena, busque el operador LIKE (pero esto será lento):
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:
fuente
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íaSELECT 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'
oLIKE '%xxx%'
no puedofuente