2008-10-24 14 views
88

Quiero encontrar una consulta SQL para buscar filas donde field1 no contiene $ x. ¿Cómo puedo hacer esto?

+0

¿Puedo usar C Función ONTAINS() (sql) para hacer la misma comprobación? – Kate

Respuesta

193

¿Qué tipo de campo es este? El operador IN no se puede utilizar con un solo campo, pero está destinado a ser utilizado 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 usted está buscando una cadena, a por el operador LIKE (pero esto va a ser lento) :

-- Finds all rows where a does not contain "text" 
SELECT * FROM x WHERE x.a NOT LIKE '%text%'; 

Si se restringe de tal manera que la cadena que está buscando tiene que empezar con la cadena dada, se puede utilizar í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%'; 
+0

¿Qué es x.b? tus cartas son muy confusas Recomiendo usar tabla o campo. – Whitecat

+0

Asegúrese de que si usa una subconsulta para 'NOT IN', ninguno de los valores será NULL, ya que [NOT IN y NULL no se combinan de manera obvia] (https://stackoverflow.com/questions/129077/ not-in-clause-and-null-values) si no está familiarizado con la lógica de tres valores. Aquí usarías 'SELECT a FROM x WHERE xb NOT IN (SELECCIONA b FROM y WHERE b IS NOT NULL);' Si también necesitas excluir valores NULL, necesitarías hacer esto: 'SELECT a FROM x WHERE xb NO EN (SELECCIONA b DE DONDE b NO ES NULO) Y xb NO ES NULO; ' –

14

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Asegúrese de escapar x $ adecuadamente de antemano para evitar la inyección de SQL)

Editar: NOT IN hace algo un poco diferente - su pregunta no está totalmente claro lo que elegir cuál usar. LIKE 'xxx%' puede usar un índice. LIKE '%xxx' o LIKE '%xxx%' no.

+0

¿Qué se considera escapar adecuadamente? Sé que con cadenas normales solo tienes que escapar de algunas cosas, pero LIKE tiene algunos personajes especiales adicionales. –

Cuestiones relacionadas